Nota:
Questa domanda si riferisce a una versione molto vecchia di jQuery.validate() (versione 1.5). Questo plug-in fornisce ora una soluzione integrata per fare questo: lo .rules()
method che dovrebbe essere usato al suo posto. Lascio questa domanda e rispondo nella sua forma originale per scopi storici a chiunque abbia bisogno di mantenere un sito legacy che non è in grado di eseguire l'aggiornamento alle ultime versioni di jQuery e jQuery.validate().Come posso aggiungere, rimuovere o scambiare le regole di convalida jQuery da una pagina?
Ho un modulo che commuta ciò che gli elementi di input sono visibili. Voglio convalidare solo gli elementi visibili nel modulo.
Sto avendo difficoltà a farlo funzionare correttamente. Voglio disabilitare i validatori per gli elementi non visibili e non riesco a capire il modo migliore per farlo. Qualche idea su cosa potrebbe essere sbagliato nel mio codice, o il mio approccio sarebbe apprezzato.
Quando la visibilità è attivata, ho provato un paio di cose:
- Calling
$("form").rules("remove")
per cancellare tutte le regole di convalida esistenti. Ciò genera un'eccezione JavaScript "non definita". - Chiamare
$("form").validation(...options...)
per gli elementi visibili, sperando che questo sovrascriva le regole. Ciò consente solo al primo gruppo che è convalidato di funzionare. Il secondo pannello non può essere convalidato. - Disattivare il gestore di invio prima di chiamare il nuovo metodo
validation()
. Questo non ha fatto quello che avrei pensato. Rimuove tutte le convalide (apparentemente) in modo permanente e il modulo viene inviato senza convalida. - Cancellare l'oggetto di convalida con
$.removeData($('form'), 'validator')
prima di provare a chiamare di nuovo il validatore. Anche questo non funziona. - Questo è in un sito ASP.NET, quindi l'utilizzo di più tag
<form />
è fuori questione dal momento che potrebbe interrompere la pagina.
Sono un po 'perplesso su come posso fare questo lavoro. Puoi vedere una demo completa di quello che ho a http://jsbin.com/ucibe3
o modificarla allo http://jsbin.com/ucibe3/edit
. Ho provato a ridurlo a solo il codice che causa il bug.
Qui sono i pezzi chiave del mio codice (uso sopra i link per la pagina di lavoro completo)
HTML:
<td id="leftform">
Left Form<br />
Input 1: <input type="text" name="leftform_input1" /><br />
Input 2: <input type="text" name="leftform_input2" /><br />
<input type="submit" name="leftform_submit" value="Submit Left" />
</td>
<td id="rightform" style="visibility:hidden">
Right Form<br />
Input 1: <input type="text" name="rightform_input1" /><br />
Input 2: <input type="text" name="rightform_input2" /><br />
<input type="submit" name="rightform_submit" value="Submit Right" />
</td>
JavaScript:
$('#toggleSwitch').click(function() {
if ($('#leftform').css("visibility") !== "hidden") {
$('#leftform').css("visibility", "hidden");
$('#rightform').css("visibility", "visible");
$('form').validate({
rules: {
rightform_input1: { required: true },
rightform_input2: { required: true }
},
messages: {
rightform_input1: "Field is required",
rightform_input2: "Field is required"
}
});
} else {
$('#rightform').css("visibility", "hidden");
$('#leftform').css("visibility", "visible");
$('form').validate({
rules: {
leftform_input1: { required: true },
leftform_input2: { required: true }
},
messages: {
leftform_input1: "Field is required",
leftform_input2: "Field is required"
}
});
}
});
Scusa se ho perso il segno con l'altra risposta, ho aggiunto un collegamento a una possibile soluzione nel mio post- Spero che sia d'aiuto. –
2014 - ora esistono diversi plugin di validazione e, sebbene io possa fare un'ipotesi plausibile, non è chiaro a quale plugin si riferisce questa domanda. Un font di collegamento sarebbe utile. –
@ Roamer-1888 Buon punto. Ho aggiornato la domanda e la risposta per specificare il plug-in, nonché la versione a cui si applica poiché questa domanda e risposta si riferisce a una versione obsoleta del plug-in e non è più pertinente. –