jQuery Validate: abilita la convalida per i campi nascosti

Nella nuova versione del plugin di convalida jQuery 1.9 per impostazione predefinita la convalida dei campi nascosti ignorata . Sto usando CKEditor per il campo di input textarea e nasconde il campo e lo sostituisce con iframe. Il campo è lì, ma la convalida è disabilitata per i campi nascosti. Con la versione 1.8.1 del plugin di convalida tutto funziona come previsto.

Quindi la mia domanda è come abilitare la convalida per i campi nascosti con il plugin di convalida v1.9.

Questa impostazione non funziona:

$.validator.setDefaults({ ignore: '' }); 

L’autore del plugin dice che dovresti usare “parentesi quadre senza virgolette” , []

http://bassistance.de/2011/10/07/release-validation-plugin-1-9-0/

Release: Validation Plugin 1.9.0: “… Un altro cambiamento dovrebbe rendere più facile la configurazione di moduli con elementi nascosti, questi sono ora ignorati di default (l’opzione” ignore “ha”: hidden “ora come predefinito). potrebbe interrompere una configurazione esistente. Nel caso improbabile che lo sia effettivamente, puoi correggerlo impostando l’opzione ignore su “[]” (parentesi quadre senza virgolette). ”

Per modificare questa impostazione per tutte le forms:

 $.validator.setDefaults({ ignore: [], // any other default options and/or rules }); 

(Non è necessario che .setDefaults() sia all’interno della funzione document.ready )

O per un modulo specifico:

 $(document).ready(function() { $('#myform').validate({ ignore: [], // any other options and/or rules }); }); 

MODIFICA :

Vedere questa risposta per come abilitare la convalida su alcuni campi nascosti ma ignorare ancora gli altri.


MODIFICA 2 :

Prima di lasciare commenti che “questo non funziona” , tieni presente che l’OP sta semplicemente chiedendo il plugin jQuery Validate e la sua domanda non ha nulla a che fare con come ASP.NET, MVC, o qualsiasi altra struttura Microsoft può alterare il normale di questo plugin comportamento atteso. Se stai usando un framework Microsoft, il funzionamento predefinito del plugin jQuery Validate è unobtrusive-validation plugin di unobtrusive-validation di Microsoft.

Se hai problemi con il plugin di unobtrusive-validation , consulta questa risposta: https://stackoverflow.com/a/11053251/594235

Questo ha funzionato per me, all’interno di un sito ASP.NET MVC3 in cui avevo lasciato il framework per configurare la convalida non invadente, ecc., Nel caso in cui fosse utile a chiunque:

 $("form").data("validator").settings.ignore = ""; 

Assicurati di mettere

  $.validator.setDefaults({ ignore: '' }); 

NON dentro $(document).ready

Quindi andrò un po ‘più in profondità nel motivo per cui questo non funziona perché sono il tipo di persona che non può dormire la notte senza sapere haha. Sto usando jQuery validare 1.10 e Microsoft jQuery Unobtrusive Validation 2.0.20710.0 che è stato pubblicato il 29/01/2013.

Ho iniziato con la ricerca del metodo setDefaults in jQuery Validate e l’ho trovato sulla riga 261 del file non ancora terminato. Tutta questa funzione fa realmente unire le tue impostazioni json ai $.validator.defaults esistenti $.validator.defaults che sono inizializzati con la proprietà ignore impostata su “: hidden” insieme agli altri valori di default definiti in jQuery Validate. Quindi a questo punto abbiamo ignorato di ignorare. Ora vediamo dove si fa riferimento a questa proprietà di default.

Quando ho rintracciato il codice per vedere dove viene fatto riferimento a $.validator.defaults . Ho notato che è stato utilizzato solo dal costruttore per un validatore di moduli, la riga 170 in jQuery convalida il file non risolto.

 // constructor for validator $.validator = function( options, form ) { this.settings = $.extend( true, {}, $.validator.defaults, options ); this.currentForm = form; this.init(); }; 

A questo punto un validatore unirà tutte le impostazioni predefinite che sono state impostate e le allega al validatore del modulo. Quando si guarda il codice che esegue la convalida, l’evidenziazione, l’evidenziazione, ecc., Tutti usano l’object validator.settings per estrarre la proprietà ignore. Quindi dobbiamo assicurarci che se vogliamo impostare l’ignore con il metodo setDefaults, allora deve accadere prima che venga chiamato $ (“form”). Validate ().

Se stai utilizzando Asp.net MVC e il plug-in discreto, ti renderai conto dopo aver visualizzato il javascript che convalida è chiamato in document.ready. Ho anche chiamato il mio setDefaults nel blocco document.ready che verrà eseguito dopo gli script, jquery validato e non invadente perché ho definito quegli script nell’html prima di quello che contiene la chiamata. Quindi la mia chiamata ovviamente non ha avuto alcun impatto sulla funzionalità predefinita di saltare gli elementi nascosti durante la convalida. Ci sono un paio di opzioni qui.

Opzione 1 – Si potrebbe notare come Juan Mellado abbia la chiamata al di fuori del documento. Già che dovrebbe essere eseguita non appena lo script è stato caricato. Non sono sicuro della tempistica di questo dato che i browser sono ora in grado di eseguire il caricamento di script paralleli. Se sto solo facendo attenzione, per favore correggimi. Inoltre, ci sono probabilmente dei modi per aggirare questo problema, ma per i miei bisogni non ho intrapreso questa strada.

Opzione 2a – La scommessa sicura ai miei occhi è di sostituire solo $.validator.setDefaults({ ignore: '' }); all’interno dell’evento document.ready con $("form").data("validator").settings.ignore = ""; . Questo modificherà la proprietà ignore effettivamente utilizzata da jQuery durante la validazione di ogni convalida sugli elementi per il modulo specificato.

Opzioni 2b – Dopo aver cercato un po ‘di più nel codice potresti anche usare $("form").validate().settings.ignore = ""; come modo di impostare la proprietà ignore. Il motivo è che quando si guarda la funzione di convalida controlla se un object validatore è già stato memorizzato per l’elemento del modulo tramite la funzione $.data() . Se trova un object validatore memorizzato con l’elemento modulo, restituisce semplicemente l’object validatore invece di crearne un altro.

Appena aggiunto ignore: [] nella pagina specifica per il modulo specifico, questa soluzione ha funzionato per me.

 $("#form_name").validate({ ignore: [], onkeyup: false, rules: { }, highlight:false, }); 

Questo ha funzionato per me all’interno di un sito ASP.NET. Per abilitare la convalida su alcuni campi nascosti usa questo codice

$("form").data("validator").settings.ignore = ":hidden:not(#myitem)";

Per abilitare la convalida di tutti gli elementi del modulo usa questo $("form").data("validator").settings.ignore = "";

Nota che li usi all’interno di $(document).ready(function() { })

Questo sta funzionando per me.

 jQuery("#form_name").validate().settings.ignore = ""; 

Basta trovare il testo ignore: “: hidden” nel file di convalida jquery e commentarlo. Dopo aver commentato questo, non perderà mai elementi nascosti da convalidare …

Grazie