Avec ma configuration de validation jquery, j'obtiens l'erreur suivante lors de la définition de onkeyup sur true. Cela fonctionne si je le définis sur false, mais je n'obtiens pas de commentaires de validation tant que je n'ai pas brouillé le champ, et je cherche à obtenir une validation sur chaque touche:
$("#signupForm").validate({
onkeyup: true,
onclick: false
// rules omitted for brevity
}
J'obtiens l'erreur suivante:
TypeError: validator.settings[eventType].call is not a function
validator.settings[eventType].call(validator, this[0], event);
jquery.validate.js line 391
Vous devez réellement définir l'option onkeyup
sur une fonction qui accepte l'élément validé en tant que paramètre, essayez donc de changer:
onkeyup: true,
à
onkeyup: function(element) {$(element).valid()}
onkeyup
est activé par défaut, vous n'avez donc pas besoin de le définir sur true
. Si vous le faites, vous cassez la fonctionnalité déjà intégrée au plugin.
Vous avez trois options:
1) Laissez l'option onkeyup
hors de .validate()
. Cela maintient la fonctionnalité onkeyup
activée par défaut. (edit: "par défaut" signifie que la validation se produit à chaque événement "key-up" seulement après le champ est initialement validé par un autre événement.)
[~ # ~] démo [~ # ~] : http://jsfiddle.net/ZvvTa/
2) onkeyup
peut être réglé sur false
pour désactiver cette option.
[~ # ~] démo [~ # ~] : http://jsfiddle.net/ZvvTa/1/
3) Remplacez onkeyup
par votre propre fonction de rappel pour modifier comment cela fonctionne. (La démo utilise la fonction par défaut)
[~ # ~] démo [~ # ~] : http://jsfiddle.net/ZvvTa/2/
Voici le défaut , non modifié , onkeyup
rappel fonction:
onkeyup: function( element, event ) {
if ( event.which === 9 && this.elementValue(element) === "" ) {
return;
} else if ( element.name in this.submitted || element === this.lastElement ) {
this.element(element);
}
}
Voir: http://docs.jquery.com/Plugins/Validation/validate#toptions
[~ # ~] éditez [~ # ~] :
Par défaut, le plugin n'effectue aucune validation de "key-up" avant après le champ est initialement validé par un autre événement. (validation "paresseuse")
Voici donc une version plus correctement modifiée de la fonction de rappel onkeyup
qui fournira une validation immédiateonkeyup
. (validation "désireuse")
DEMO: http://jsfiddle.net/QfKk7/
onkeyup: function (element, event) {
if (event.which === 9 && this.elementValue(element) === "") {
return;
} else {
this.element(element);
}
}
@Sparky a raison, la bonne réponse est de supprimer l'option onkeyup
, mon violon fonctionnait parce que j'avais supprimé l'option onkeyup
et non parce que je l'avais changé en keyup
.
Par défaut, la validation aura lieu lors d'un événement de frappe, si vous souhaitez désactiver cette fonctionnalité, vous devez ajouter le paramètre onkeyup: false
.
Voir la démo mise à jour.
Démo: Fiddle
les valeurs booléennes ne sont pas des valeurs valides pour l'événement onkeyup. Ajoutez plutôt une fonction sur ce qui doit être fait. Essayez quelque chose comme:
onkeyup: function(element) {
$(element).valid();
}
onblur: function(element) {
$(element).valid();
}
Que diriez-vous d'étendre onkeyup:
$('#signup-form').validate({
onkeyup: function(element) {
var element_id = $(element).attr('id');
if (this.settings.rules[element_id].onkeyup !== false) {
$(element).valid();
}
},
Alors maintenant, dans les règles, vous pouvez le faire:
rules: {
username: {
required: true,
minlength: 3,
maxlength: 25,
onkeyup: false, /* on blur validation */
},
password: {
required: true,
passwordmeter: true,
onkeyup: true, /* on keyup validation */
},
En étendant onkeyup nous en avons fait un comportement par défaut, donc coller onkeyup: true
est facultatif.