Quindi approfondirò il perché questo non funziona perché sono il tipo di persona che non riesce a dormire la notte senza sapere ahah. Sto usando jQuery validate 1.10 e Microsoft jQuery Unobtrusive Validation 2.0.20710.0, pubblicato il 29/01/2013.
Ho iniziato cercando il metodo setDefaults in jQuery Validate e l'ho trovato sulla riga 261 del file non miniato. Tutto ciò che questa funzione fa davvero è unire le tue impostazioni json a quelle esistenti $.validator.defaults
che sono inizializzate con la proprietà ignore impostata su ": hidden" insieme alle altre impostazioni predefinite definite in jQuery Validate. Quindi a questo punto abbiamo ignorato Ignora. Ora vediamo dove si fa riferimento a questa proprietà di default.
Quando ho tracciato il codice per vedere dove $.validator.defaults
viene fatto riferimento. Ho notato che è stato utilizzato solo dal costruttore per un validatore di moduli, la riga 170 in jQuery convalida il file non minificato.
// 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 lo collegherà al validatore del modulo. Quando si esamina il codice che sta eseguendo la convalida, l'evidenziazione, la non evidenziazione, ecc., Tutti usano l'oggetto validator.settings per estrarre la proprietà ignore. Quindi dobbiamo assicurarci che se vogliamo impostare l'ignore con il metodo setDefaults, deve avvenire prima che venga chiamato $ ("form"). Validate ().
Se stai usando Asp.net MVC e il plug-in discreto, ti renderai conto dopo aver esaminato il javascript che convalida viene chiamato in document.ready. Ho anche chiamato il mio setDefaults nel blocco document.ready che verrà eseguito dopo gli script, jquery validate e discreto 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 elementi nascosti durante la convalida. Ci sono un paio di opzioni qui.
Opzione 1 - Potresti, come ha sottolineato Juan Mellado, avere la chiamata al di fuori del documento, che verrebbe eseguita non appena lo script sarà stato caricato. Non sono sicuro del tempismo di questo dato che i browser sono ora in grado di eseguire il caricamento di script parallelo. Se sono troppo cauto, per favore correggimi. Inoltre, ci sono probabilmente modi per aggirare questo, ma per le mie esigenze non sono andato su questa strada.
Opzione 2a - La scommessa sicura ai miei occhi è semplicemente quella di sostituire l' $.validator.setDefaults({ ignore: '' });
interno del documento $("form").data("validator").settings.ignore = "";
. Ciò modificherà la proprietà ignore effettivamente utilizzata da jQuery validate quando si esegue ogni convalida sugli elementi per il modulo specificato.
Opzioni 2b : dopo aver esaminato un po 'di più il codice, è possibile utilizzare anche $("form").validate().settings.ignore = "";
come impostazione della proprietà ignore. Il motivo è che quando si esamina la funzione di convalida verifica se un oggetto validatore è già stato memorizzato per l'elemento del modulo tramite la $.data()
funzione. Se trova un oggetto validatore memorizzato con l'elemento form, restituisce semplicemente l'oggetto validatore invece di crearne un altro.