web-dev-qa-db-fra.com

Erreur dans jquery.validate.js dans le projet MVC 4 avec jQuery 1.9

J'ai créé un nouveau projet ASP.Net MVC 4 à l'aide du modèle dans Visual Studio 2012. Après la mise à niveau vers jQuery 1.9, la fonctionnalité de connexion est interrompue. Plus précisément, je reçois l'erreur

0x800a138f - Erreur d'exécution JavaScript: impossible d'obtenir la propriété 'appel' d'une référence non définie ou nulle

à la ligne 1172, colonne 5 de jquery.validate.js

Comment puis-je résoudre ce problème?

61
Eric J.

Ce problème est résolu dans plugin de validation jQuery 1.11.0pre.

Malheureusement, il n’existe actuellement aucune version préliminaire de NuGet, il est donc nécessaire de télécharger jquery.validation.js directement à partir de GitHub:

jQuery.Validation 1.11 est maintenant disponible via NuGet (merci @Simon_Weaver).

[~ # ~] met à jour [~ # ~]

Il semble que général le support de jQuery 1.9 est dans la base de code jQuery.Validation mais n’a pas encore été publié.

https://github.com/jzaefferer/jquery-validation/pull/61

84
Eric J.

Si vous installez jQuery.Migrate 1.1.1, il fonctionnera correctement avec jQuery.Validation 1.11, jQuery 1.9 et 2.x.

En plus de faire install-package jQuery.Migrate, vous devez ensuite ajouter le code JavaScript à BundleConfig.cs - je l’ai ajouté juste après jQuery et voici à quoi ressemble la ligne qui enregistre jQuery:

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
  "~/Scripts/jquery-{version}.js",           // jQuery itself
  "~/Scripts/jquery-migrate-{version}.js")); // jQuery migrate
37
Richard

Le problème est la ligne de code à l'intérieur du script de validation

$.event.handle.call(this,e);

Le problème ici est avec $.event.handle. this et e ont tous deux des valeurs appropriées. jQuery a obsolète $ .event.handle en faveur de jQuery.event.dispatch selon le script de migration http://code.jquery.com/jquery-migrate-1.2.0.js .

La correction de ces erreurs est aussi simple que le simple remplacement de la référence à traiter avec dispatch.

Cela peut être encapsulé dans un rappel document.ready pour s'assurer qu'il est exécuté après l'exécution des autres scripts.

$(function(){
    jQuery.event.handle = jQuery.event.dispatch
});
10
Travis J

J'ai eu le même problème, pas de problème dans Firefox mais c’est-à-dire qu’il donne toujours l’erreur. J'utilise jquery-2.0.0; Plugin de validation jQuery 1.11.1

J'ai trouvé un correctif: remplacer

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

avec

@section Scripts{
    <script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/jqueryval")"></script>
}
8
Texellab

Remplacer le chemin de script des ensembles par la ligne suivante a fonctionné pour moi.

 <script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/jqueryval")"></script>

J'ai essayé de mettre à jour la validation de jquery via Nuget, et j'ai également mis à jour jquery à la version 2.0, mais aucune de ces solutions ne fonctionnait. Le seul qui a bien fonctionné sans rien télécharger avant la version pré était la solution proposée par Texellab

2
Javier

Le problème sous-jacent est que certaines méthodes qui étaient obsolètes depuis jQuery 1.7 (lorsque de nouvelles méthodes améliorées ont été ajoutées) ont été supprimées dans la version 1.9. jQuery Validate n'a apparemment pas été mis à jour et utilise donc les nouvelles méthodes. J'ai constaté que l'utilisation du plug-in jQuery Migrate, qui rétablit les méthodes supprimées, résolvait mes problèmes.

0
Vance

Voici une autre solution:

J'ai utilisé MVC 3 avec jQuery 1.71 et jQuery UI 1.8.20. J'ai utilisé le widget Onglets de l'interface utilisateur jQuery et ai configuré chaque zone d'onglets pour charger une page partielle contenant des champs de saisie.

Fonctionne très bien dans Firefox v22 et Chrome v28, échoue dans IE10. L'erreur que j'ai obtenue était 'Impossible d'obtenir la propriété' paramètres 'de référence non définie ou nulle'

La résolution était d'aller dans les formulaires partiels et de commenter le code suivant:

<script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>*

Cela fonctionne maintenant avec succès dans tous les navigateurs.

0
Derek Davidson PST