2009-11-18 3 views
4

Si j'ai ajouté une méthode de validation personnalisée à mon formulaire, comment puis-je le déclencher avant de l'envoyer?jQuery - Obtention des méthodes de validation personnalisées à déclencher

Je ne décore pas mes champs de formulaire mais je pensais que l'ajout de la nouvelle méthode à ma section de règles déclencherait la méthode mais cela ne fonctionne pas. Je souhaite que la validation soit déclenchée lorsque le bouton "Soumettre" est pressé. Toutefois, si j'ajoute le nom de la classe de validation à un champ de formulaire quelconque, à l'exception du bouton Soumettre, cette règle est déclenchée. ne peuvent tout simplement pas obtenir à déclencher juste avant de soumettre ..

+0

Je pense que Editting ceci pour inclure l'extrait HTML contenant le formulaire que vous essayez de valider aidera. – jamiebarrow

Répondre

0

Enveloppez votre code:

$(function(){ 
    //your code goes here 
}); 

sera jointe des événements de validation sur la page charge.

+0

C'est déjà emballé - c'est plus que la validation ne se déclenche pas avant que le formulaire ne soit soumis. –

1

Je ne l'ai pas utilisé la fonction addMethod mais je peux vous suggérer ceci:

$.validator.methods.myCustomValidation = function(value, element, param) { 
    // Perform custom validation and return true or false 
    return value === '' || /^([0-9]{10})$/.test(value); 
}; 


$("#myFormId").validate({   
    rules: { 
     myElement: { 
      myCustomValidation: true 
     } 
    }, 
    messages: { 
     myElement: { 
      myCustomValidation: "Enter some information before proceeding" 
     } 
    }, 
    submitHandler: function(form) 
    { 
     // do the work to submit this form 
    } 
}); 
+0

J'ai essayé mais ça ne semble pas fonctionner. Ce que j'essaye de faire est de m'assurer que la validation se déclenche avant que le submitHandler soit invoqué. Je pensais avoir les règles sur l'élément (spécifié dans le nom de la classe) déclencherait la validation .. Peut-être que je ne comprends pas très bien les docs. –

0

Il vous manque quelque chose. les règles devraient ressembler à ceci.

rules: { 
    "elemId": { 
     required: true, 
     myCustomValidation: true 
    } 
}, 
0

Appel .valid() pour déclencher la validation:

$("#myFormId").valid(); 
+0

Pouvez-vous appeler 'valide' dans le submitHandler? –

0

Je pense que vous cherchez addClassRules

$.validator.addMethod('myCustomValidation', function (data) 
{ 
    // do some work here 
    return myValidationResult; 

}, 'Please respond.'); 

$.validator.addClassRules({ 
    myCustomValidation: { myCustomValidation: true, required: true } 
}); 

$("#myFormId").validate({   
    messages: { 
     "myCustomValidation": { 
      required: "Enter some information before proceeding",   
     } 
    }, 
    submitHandler: function(form) 
    { 
     // do the work to submit this form 
    } 
}); 
0

Je recommande d'utiliser le $.validator.addMethod natif pour lier la méthode personnalisée. Après cela, appelez simplement blur() de jquery sur le element pour déclencher la validation.

En raison d'une condition de course que je soupçonne existe dans jQuery Valider, je devais tour attendre afin d'éviter d'obtenir un message d'erreur vide lorsque j'invoque programme validation

  //after binding custom validation method 
      if($("#myElement").length){//add any checks you need 
       var millisecondsToWait = 500; 
       //Spin because it works 
       setTimeout(function() { 
        $("#myElement").blur(); 
        //$("#myElement").valid();//or this 
       }, millisecondsToWait);