2010-11-11 16 views
9

C'è un modo per passare parametri dinamici in un metodo di validazione jquery personalizzato? In particolare, stavo cercando un modo per confrontare 2 controlli e vorrei passare l'uno al metodo di validazione dell'altro per il confronto.Parametri dinamici Jquery Validator

Ecco quello che ho attualmente:

//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 
     } 
    } 
}); 

Se l'eseguo come sopra, funziona come dovrebbe. Se cambio l'8 passato in lowerInt in $ ('# highInt'). Val(), sembra che il valore per la funzione lowerInt sia impostato una sola volta e non lo aggiorni mai. Mi rendo conto che posso ottenere il valore all'interno del metodo chiamando $ ('# highInt'). Val(), ma vorrei invece passare il valore se possibile.

risposta

15

Vorrei passare in un selettore, come questo:

//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' 
    } 
    } 
}); 

Questa versione avrà un numero o un selettore, rendendolo più flessibile possibile.

+1

Sarà questa uscita il messaggio 'Si prega di inserire un numero minore di #highInt'? Mi piacerebbe poter dare all'utente qualcosa di più amichevole. – jinglesthula

3

Imposta il parametro su una funzione.

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

quindi si chiama la funzione nel metodo validate qualcosa come

var high = params[0](); 
Problemi correlati