Voici le code html pour le formulaire:
<form method="post" id="login" action="/login">
<div class="login-element">
<label for="email">E-Mail</label>
<input type="text" name="email">
</div>
<div class="login-element">
<label for="password">Passwort</label>
<input type="password" name="password">
</div>
<div class="login-element">
<input type="submit" value="Login">
</div>
</form>
et voici le code que j'ai utilisé pour la validation:
$(document).ready(function() {
$("#login").validate({
debug: true,
rules: {
email: {
required: true,
email: true
},
password: {
required: true
}
},
messages: {
email: {
required: "Please enter a email adress",
email: "Please enter a valid email address"
},
password:"Please enter password"
}
});
});
Dans la console, l'erreur suivante est enregistrée:
TypeError: validator is undefined
...or.settings[eventType] && validator.settings[eventType].call(validator, this[0],...
Quel pourrait être le problème ici?
Cette erreur est survenue parce que j'avais un autre élément html avec le même identifiant .
Vous devez inclure le script de validation dans l'en-tête de votre document.
Comme ça:
<script src="/js/libs/jquery.validate.js" type="text/javascript"></script>
Vérifiez également dans le code HTML rendu que votre ID de formulaire est correct.
J'utilise ce code pour appeler valider sur mes sites
//Validate Form
var ids = [];
$("form").each(function () {
ids.Push(this.id);
});
var formId = "#" + ids[0]
$(formId).validate();
Pour ceux qui cherchent encore une réponse, les réponses ci-dessus ne fonctionnent pas.
J'ai passé les 3 dernières heures à essayer toute la solution et aucune d'entre elles n'a fonctionné.
J'ai finalement réalisé une erreur très stupide, j'avais initialisé Jquery deux fois dans mon application
une fois dans la tête où j'avais inclus 3 scripts
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
et encore une fois à la fin de la page où je n'avais que la ligne.
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
Cela réinitialisait la fonction de validation de $ et provoquait la rupture de tout.
Certaines choses à vérifier pour les cas où les validations ne sont pas déclenchées.
Le script est-il dans le bon ordre? jquery suivi de validate suivi de discret.
La fonction $ .validator est-elle définie? Vérifiez rapidement dans la console du navigateur
Le formulaire à valider est-il créé de manière dynamique? Si tel est le cas, vous devrez peut-être ré-initialiser le plug-in validateur sur le formulaire. La meilleure façon de le faire est mentionnée ci-dessous. Choisissez celle qui vous convient le mieux.
$.validator.unobstrusive.parse('#myForm')
ou
$('#myForm').validate() // this just makes the validator plugin consider the form for unobstrusive validation
ou
$('#myForm').valid() // this will trigger unobstrusive validation on the form.
J'espère que cela t'aides.
Le même problème est apparu pour moi. La raison de cette erreur est que j'utilisais le code:
if ($("#invalidFormId").valid()) {
....
}
Et la id
de l'élément form
n'était pas valide
Dans mon cas, le problème est venu d'avoir deux versions d'instance de Jquery UI i JQuery. Cela fait que le code normal de Jquery fonctionne correctement mais supprime l’instance de $ .validator.
J'avais @Scripts.Render("~/bundles/jquery")
dans la vue parent (_Layout.cshtml) et j'avais également défini d'autres balises de script jquery dans une autre vue, elles se sont heurtées.
Comme il s’agit du premier sujet que Google indique pour "validateur n’est pas défini", je vais décrire mon problème résolu. Peut-être que quelqu'un le trouvera utile.
J'utilisais l'attribut 'maxlength' (rien d'extraordinaire) et j'ai eu cette erreur. La raison était des formes imbriquées. L'un des textes était à l'intérieur des deux formes. Cela peut arriver lorsque vous avez des modaux (boîtes de dialogue) avec des formulaires dans la vue principale.
Dans mon cas, l'erreur était due au fait que le validateur avait été appelé trop tôt. J'ai déplacé le code vers une fonction distincte et je l'ai appelé en utilisant la méthode delay de underscore.js. Travaillé comme un charme.
_.delay(doValidations);
function doValidations() {
...
});
Dans mon cas, j'appelais $.validator
avant $(document).ready
. Une fois que je l'ai déplacé vers une fonction appelée depuis ready
, cela a fonctionné. Cela fonctionnera après ou pendant ready
mais pas avant.
La même chose s'est produite ici. Pour moi, c'était une faute de frappe dans mon code:
$(document).ready(function(){
//START of validate
$('#reply').validate({
rules:{
message:{
required: true,
},
},
submitHandler: function(form) {
var data = $("#reply").serialize();
$.ajax({
type:"POST",
url:"ajax/scripts/msg_crt.php",
data:data,
success:function(data){
alert("Loaded");
}
});
}
});
//END of validate
});
$(document).on('click','#send', function(){
if($('#replay').valid()){// <--- Here is my selector typo
$("#replay").submit(); // <--- Here is my selector typo
}
return false;
});
Le plugin est livré dans des bibliothèques séparées, vous devez les inclure dans votre code HTML.
<script src="../jquery-validation/dist/jquery-validate.min.js"></script>
<script src="../jquery-validation/dist/additional-methods.min.js"></script>
Ce problème se produisait pour moi lors de l'appel de validator.destroy () - l'erreur se produisait dans la méthode staticRules du plug-in. La cause s'est avérée être l'élément de formulaire associé (element.form) a été détaché du DOM. Je l'ai résolu en vérifiant que l'élément était dans le DOM avant d'appeler destroy, en utilisant la méthode suivante:
document.contains(element)
Espérons que cela aide quelqu'un.