2010-11-19 8 views
11

J'ai besoin d'aide pour créer une méthode personnalisée pour valider la somme de plusieurs valeurs d'entrée de texte.jquery validate: somme de plusieurs valeurs d'entrée

En forme je nombre variable d'entrées de texte et lors de la présentation que je dois valider que la somme des valeurs d'entrée dans un même groupe est exactement 100.

exemple (deuxième groupe ne devrait pas valider):

<input type='text' name='g1_number1' class='group1' value='20' /> 
<input type='text' name='g1_number2' class='group1' value='40' /> 
<input type='text' name='g1_number3' class='group1' value='40' /> 

<input type='text' name='g2_number1' class='group2' value='20' /> 
<input type='text' name='g2_number2' class='group2' value='40' /> 
<input type='text' name='g2_number3' class='group2' value='10' /> 

Répondre

16

Je l'ai travailler de cette façon:

règle de validation personnalisée:

$.validator.addMethod(
    "sum", 
    function (value, element, params) { 
     var sumOfVals = 0; 
     var parent = $(element).parent(".parentDiv"); 
     $(parent).find("input").each(function() { 
      sumOfVals = sumOfVals + parseInt($(this).val(), 10); 
     }); 
     if (sumOfVals == params) return true; 
     return false; 
    }, 
    jQuery.format("Sum must be {0}") 
); 

Et en utilisant comme ceci:

$(".group1").rules('add', {sum: 100}); 
$(".group2").rules('add', {sum: 100}); 
6
var sumOfValues=0; 
$(".group1").each(function(){ 
    sumOfValues+=$(this).val(); 
}); 
if(sumOfValues==100){ 

}else{ 

} 

ou sous forme de plug-in

$.fn.validateValuesSum=function(value){ 
    var sumOfValues=0; 
    this.each(function(){ 
    sumOfValues+=$(this).val(); 
    }); 
    if(sumOfValues==value){ 
     return true; 
    } 
    return false; 
} 
+4

'val()' retourne une chaîne et peut-être pas exactement ce que vous attendez. Utilisez 'parseFloat ($ (this) .val())' ou 'Number ($ (this) .val())' pour obtenir une valeur numérique (ou un 'NaN' que vous pouvez vérifier pour les valeurs invalides). –

+1

Est-il possible de l'implémenter dans le plugin jquery-validation? – Vertigo