web-dev-qa-db-fra.com

jQuery.validate.js onkeyup = true error

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
19
Adam Levitt

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()}
36
Sudhir Bastakoti

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);
    }
}
33
Sparky

@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

5
Arun P Johny

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(); 
    }
3
Anusha

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.

2
Artur Kędzior