2012-05-29 9 views
5

Il prodotto su cui sto lavorando utilizza la convalida JQuery con MVC3 che lavora dietro le quinte. Dispongo di un campo che si imposta come di sola lettura (in base al fatto che il valore di un menu a discesa sia o meno> 0) o meno.Come posso disabilitare la validazione jquery su campi di sola lettura?

Il trucco è che questo campo deve essere richiesto quando non è di sola lettura e deve essere inviato senza errori quando è di sola lettura, indipendentemente dal fatto che disponga o meno di dati.

Come dovrei andare a fare questo?

risposta

14
$.validator.setDefaults({ 
    ignore: ':hidden, [readonly=readonly]' 
}); 

Il valore predefinito per il parametro ignore è ":hidden". Ripristinando il valore predefinito usando il codice sopra, ci si assicura che jquery validate continui a non agire sugli elementi del modulo nascosto, ma non agisca anche sugli elementi che hanno un attributo readonly="readonly".

rispondere ai commenti

Che suona strano, potrebbe essere necessario inserire un codice per ottenere più aiuto. Una cosa che si potrebbe provare a rimuovere gli errori di convalida è quello di validare manualmente il modulo quando si commuta l'attributo di sola lettura, qualcosa di simile, forse:

$('#the_text_box').attr('readonly', 'readonly'); 
$.validator.setDefaults(':hidden'); 
$('form').valid(); 
$.validator.setDefaults(':hidden, [readonly=readonly]'); 

Si potrebbe anche fare qualcosa di simile durante il caricamento della pagina iniziale, al fine di evitare l'istante messaggi di errore di convalida.

$.validator.setDefaults(':hidden, [readonly=readonly]'); 
$('form').valid(); 
+0

Grazie, sembra che stia facendo il trucco per consentire alla convalida lato client di non rifiutare la pagina. Allo stesso tempo, però, quando carico la pagina per la prima volta, i validatori mostrano immediatamente i messaggi che non sono validi per tutti i campi vuoti richiesti di sola lettura. Inoltre, sembra che non rimuova l'impostazione non valida quando cambio il campo in readonly tramite JavaScript. Mi sto perdendo qualcosa o è solo qualcosa di specifico per l'implementazione del mio prodotto? – Brisbe42

+0

Solo per spiegare cosa era successo, questo ha funzionato per me - ad un certo punto. Il mio codice aveva alcune funzionalità nascoste che lo facevano avviare la pagina con errori di validazione già applicati sul lato server. Ho finito per dover andare con una soluzione che ha colpito questi. Il .valid() sugli elementi, combinato con il flag di sola lettura, ha funzionato per la convalida sul lato client. Grazie per l'aiuto! – Brisbe42