2010-11-11 5 views
9

Existe-t-il un moyen de transmettre des paramètres dynamiques dans une méthode de validation jquery personnalisée? Plus précisément, je cherchais un moyen de comparer 2 contrôles et je voudrais passer l'un à la méthode de validation de l'autre pour la comparaison.Jquery Validator Paramètres dynamiques

Voici ce que j'ai actuellement:

//Add method 
$.validator.addMethod("lowerInt", function(value, element, params) { 
      alert('inside method'); 
      if (isNaN(parseInt(params))) 
       return true; 
      else 
       return parseInt(value) < parseInt(params); 
     }, $.validator.format("Please enter a number smaller than {0}")); 

//Set validation 
$("#form1").validate({ 
    rules: { 
     lowInt: { 
      required: true, 
      integer: true, 
      lowerInt: 8 //I would like to pass a dynamic value here 
     } 
    } 
}); 

Si je cours comme ci-dessus, cela fonctionne comme il se doit. Si je change le 8 passé en lowerInt à $ ('# highInt'). Val(), il semble ne définir qu'une seule fois la valeur de la fonction lowerInt et ne jamais la mettre à jour. Je me rends compte que je peux obtenir la valeur à l'intérieur de la méthode en appelant $ ('# highInt'). Val(), mais je voudrais passer la valeur à la place si possible.

Répondre

15

je passerais dans un sélecteur, comme celui-ci:

//Add method 
$.validator.addMethod("lowerInt", function(value, element, params) { 
    var hi = typeof params[0] == "string" ? 
      parseInt($(params[0]).val(), 10) : 
      params[0]; 
    if (isNaN(hi)) 
    return true; 
    else 
    return parseInt(value) < hi; 
}, $.validator.format("Please enter a number smaller than {0}")); 

//Set validation 
$("#form1").validate({ 
    rules: { 
    lowInt: { 
     required: true, 
     integer: true, 
     lowerInt: '#highInt' 
    } 
    } 
}); 

Cette version prendra un nombre ou un sélecteur, le rendant aussi flexible que possible.

+1

Est-ce que cette sortie le message « S'il vous plaît entrer un numéro plus petit que #highInt »? J'aimerais être en mesure de donner à l'utilisateur quelque chose de plus convivial. – jinglesthula

3

Faire du paramètre une fonction.

$("#form1").validate({ 
    rules: { 
     lowInt: { 
      required: true, 
      integer: true, 
      lowerInt: function(){ return $('#highInt').val(); } 
     } 
    } 
}); 

Ensuite, vous appelez la fonction dans la méthode validate quelque chose comme

var high = params[0]();