2013-09-04 2 views
10

Ho 3 campi di input che richiedono il numero di persone e di loro quanti sono gli adulti e quanti sono i bambini. Sto cercando di utilizzare jQuery convalidare plugin per aggiungere un metodo personalizzato in cui bambini + adulti = numero di personejQuery convalida su più campi

Questo è il mio invito convalida

$("#form2").validate({ 
    errorElement: "span", 
     rules: { 
     attendees: { 
      required: true, 
      digits: true 
     },    
     adults: { 
      required: true, 
      digits: true 
     },    
     children: { 
      required: true, 
      digits: true 
     } 
    }, 
    messages: { 
     attendees: "Enter the number of persons (including yourself)", 
     adults: "Enter number of adults", 
     children: "Enter number of childern"     
    }    
}); 

ho guardato la funzione di gruppo e addMetod del plugin validate ma sembra che sia stato realizzato solo con un elemento in mente. Qualche idea ?

+0

Si potrebbe lanciare in una dichiarazione '.each()' forse? –

+1

Suggerirei di ignorare completamente l'input dei partecipanti se si desidera inserire una limitazione totale = adulto + figli. Invece, avere un campo nascosto "totale" il cui valore dovrebbe essere aggiornato per i bambini + adulti appena prima che il modulo sia presentato. – Neeraj

risposta

24

Seguire the documentation per la creazione di un metodo personalizzato/regola. Qui, lo chiamo semplicemente totalCheck, ma puoi chiamarlo come preferisci.

$.validator.addMethod('totalCheck', function(value, element, params) { 
    var field_1 = $('input[name="' + params[0] + '"]').val(), 
     field_2 = $('input[name="' + params[1] + '"]').val(); 
    return parseInt(value) === parseInt(field_1) + parseInt(field_2); 
}, "Enter the number of persons (including yourself)"); 

È implementato come qualsiasi altra regola. I due parametri sono gli attributi name degli altri due campi da controllare. Poiché questa nuova regola dice che il campo deve contenere la somma degli altri due campi, le regole required e digits sono ora ridondanti e possono essere rimosse.

$("#form2").validate({ 
    errorElement: "span", 
    rules: { 
     attendees: { 
      totalCheck: ['adults', 'children'] // <-- your custom rule 
     }, 
     adults: { 
      required: true, 
      digits: true 
     }, 
     children: { 
      required: true, 
      digits: true 
     } 
    }, 
    messages: { 
     adults: "Enter number of adults", 
     children: "Enter number of childern" 
    } 
}); 

lavoro DEMO: http://jsfiddle.net/hBXL6/

+1

Grazie amico ... buon lavoro – Binaryrespawn

+0

c'è qualche limite di parametri per questo? – Limon

+0

@Limon, nessun limite al numero di parametri di cui sono a conoscenza. – Sparky

-1

Come suggerito nei commenti, questa non è una buona pratica. Tuttavia, se si vuole ancora farlo:

$("#form2").validate({ 
    errorElement: "span", 
     rules: { 
     attendees: { 
      equal: $("#form2 #adults").val() + $("#form2 #children").val(); 
     },    
     adults: { 
      required: true, 
      digits: true 
     },    
     children: { 
      required: true, 
      digits: true 
     } 
    }, 
    messages: { 
     attendees: "Enter the number of persons (including yourself)", 
     adults: "Enter number of adults", 
     children: "Enter number of childern"     
    }    
}); 
+0

Non esiste un tale metodo o regola chiamata 'uguale'. – Sparky

0

La risposta da Sparky non è completa: la necessità adults e children di ri-convalidare attendees quando cambiato.

Append questo alla fine:

$('input[name=adults],input[name=children]').on('change', function(){ 
    $('input[name=attendees]').removeData("previousValue").valid(); 
}); 

Nota: anche se in possesso di un dottorato di ricerca in CS, non ho i punti ancora commentare ... da qui una nuova risposta.