2010-12-15 98 views
3

J'essaie d'avoir une valeur min dynamiquement mise à jour sur un champ, en fonction de l'entrée provenant d'autres champs. Voici mon code en bref:Réglage dynamique de la valeur min sur le champ de texte à l'aide du plugin Jquery Validate

$("#new_project").live("click", function() { 

    switch($('input:radio[name=quality-level]:checked').val()){ 
     case 'average' : ppw = .006; 
     case 'below-average' : ppw =.004; 
     case 'good' : ppw = .008; 
     case 'very-good' : ppw = .016; 
    } 

    if ($('#minimum-word-length').val() && $('input:radio[name=quality-level]:checked').val()) 
    { 
     min_price = $('#minimum-word-length').val() * ppw; 

    } 

    $("#new_project, .edit_project").validate({ 
    rules: { 
    ... 
    "price-per-article": {required: true, number: true, min:min_price}, 
    ... 
    }, 
    errorPlacement: function(error, element) { } 


    }); 

}); 

Le prix minimum est réglé correctement et se met à jour correctement. Cela dit, pour une raison quelconque, la règle de valeur min ne met pas à jour ce que je pense est parce que le code de validation est seulement chargé sur le chargement du document. Donc, je suppose qu'il existe un moyen de recharger les règles de sorte que la valeur min change quand les deux champs nécessaires sont remplis?

Merci!

Répondre

5

Le problème est que vous configurez l'objet de validation avec le prix par article lors du chargement initial. Je ne suis pas familier avec le plug-in de validation, mais en général, si vos propriétés changent pour un objet en temps réel, vous devez utiliser une fonction de rappel pour cette propriété, plutôt que de définir ses données en charge.

Donc, pour l'entrée prix par article, il serait probablement ressembler à:

"price-per-article": { 
    required: true, 
    number: true, 
    min: function() { return $('#minimum-word-length').val() * ppw; } 
} 
1

Au lieu d'avoir une valeur fixe pour la validation des prix par article, modifier une fonction anonyme:

"price-per-article": { 
    required: true, 
    number: true, 
    min: function() { return min_price; } 
} 

De cette façon, la valeur de MIN_PRICE est vérifiée chaque validation de temps est appelé.

0

Cet exemple obtient min année & année max est dérivé min:

$(document).ready(function() { 
    function getMinYear() { 
     var d = new Date(); 
     var y = parseInt(d.getFullYear()); 

     console.log("Min: " + y); 
     return y; 
    } 

    $("#frmAddCard").validate({ 
     rules : { 
      year : { 
       required : true, 
       number: true, 
       min: getMinYear(), 
       max: getMinYear() + 10 
      } 
     }, 
     messages : {     
      year : { 
       required : "Expiration Date: Please enter valid year (e.g. 2016)", 
       number : "Expiration Date: Please enter valid year (e.g. 2016)", 
       min : function (elem) { 
        var y = getMinYear(); 

        return "Min: Please enter the value between " + y.toString() + " and " + (y + 10).toString(); 
       }, 
       max : function (elem) { 
        var y = getMinYear() + 10; 

        return "Max: Please enter the value between " + y.toString() + " and " + (y + 10).toString(); 
       } 
      } 
     }, 
     submitHandler : function (form) { 
     }, 
     invalidHandler : function (event, validator) {    
     } 
    }); 
});