jQuery Validation plugin, IE7 " SCRIPT3: membre introuvable"
j'ai le code suivant:
<html>
<head>
</head>
<body>
<div>
<form method="post">
<div id="questions">
<label for="question-6">Name of Course:</label>
<input type="text" name="name_of_course[response]" value="" id="question-6" class="required">
<label class="control-label" for="reporting-year">Reporting Year: </label>
<select name="reporting_year" id="reporting-year">
<option value="-1" selected="selected">Select option...</option>
<option value="4">2013-2014</option>
<option value="1">2012-2013</option>
<option value="2">2011-2012</option>
<option value="3">2010-2011</option>
</select>
</div>
<input type="submit" name="submit" value="Save Entry" class="btn">
</form>
</div>
<script src="//code.jquery.com/jquery.js"></script>
<script src="//ajax.aspnetcdn.com/ajax/jquery.validate/1.10.0/jquery.validate.min.js"></script>
<script>
$(function(){
jQuery.validator.addMethod("notEqual", function(value, element, param) {
return this.optional(element) || value !== param;
}, "Please select an option");
$('form').validate({
rules:{
'reporting_year': {
notEqual: "-1"
}
}
});
});
</script>
</body>
</html>
le navigateur préféré de tout le monde, IE7 (IE10 W / compatibility really) rapporte l'erreur suivante dans la console:
SCRIPT3: membre introuvable.
jquery.js, ligne 2525 caractère 4
bien sûr, IE8 et au-dessus de bien fonctionner, mais mon client est à l'aide de IE7.
5 réponses
on dirait que C'est un bug avec IE10 en mode compatibilité car il est rapporté qu'il fonctionne avec IE7. Mais il y a des solutions de rechange à jquery ici.: http://bugs.jquery.com/ticket/12577
ce que j'ai trouvé à l'origine du problème est la ligne 35 de jquery.valider.js
this.attr('novalidate', 'novalidate');
Commenter cette ligne et le problème est sovled. Vous pouvez également envelopper avec un ( navigateur actuel <= ie7) explicitement éviter cette ligne que lorsque ie7 est le navigateur.
mise à Jour Pour commenter ligne seulement pour ie7, vous pouvez utiliser le code suivant:
var ie = (function () {
var undef,
v = 3,
div = document.createElement('div'),
all = div.getElementsByTagName('i');
while (
div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
all[0]
);
return v > 4 ? v : undef;
} ());
puis:
if (!ie || ie > 7) {
this.attr('novalidate', 'novalidate');
}
Bonjour problème de jQuery de validation
https://github.com/jzaefferer/jquery-validation/issues/845
modifier la ligne 33 du plugin de Validation jquery à partir de:
this.attr( "novalidate", "novalidate" );
this.prop( "novalidate", "novalidate" );
j'allais ajouter un commentaire à la réponse de Xaris, mais je voulais donner un peu plus d'info dans une réponse complète. J'ai changé la ligne à jQuery.valider.js:
if (!$.browser.msie || $.browser.version > 7) {
this.attr("novalidate", "novalidate");
}
cependant,$.le navigateur a été supprimé de jQuery dans la version 1.9, donc j'ai dû ajouter le plugin jQuery Migrate (c'est un plugin officiel jQuery).
si vous utilisez les paquets nuget dans .NET et que vous utilisez la fonction bundling, alors gardez à l'esprit que vous pouvez mettre à jour manuellement jQuery.valider.js, mais l' le problème existera toujours à jQuery.valider.min.js. J'ai dû supprimer la version miniaturisée pour que le bundling ne la reprenne pas en production. C'est une mauvaise pratique d'éditer les fichiers fournis par nuget car mes modifications seront écrasées lorsque le paquet sera mis à jour, mais c'est la meilleure solution pour ce problème en ce moment.
Mon problème similaire
j'ai eu le même SCRIPT3: Member not found
problème dans IE11 en raison de la X-UA-Compatible:
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
ma solution
dans mon cas, ces jours-ci, les exigences de la demande sont IE8+.
alors, pour corriger le problème, il suffit de supprimer la balise meta ou de la modifier en:
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
la Solution pour des OP de cas (ou tout autre problème)
selon la compatibilité exigences, il peut être utilisé de la même solution que j'ai utilisé.