Also werde ich etwas tiefer gehen, warum dies nicht funktioniert, weil ich die Art von Person bin, die nachts nicht schlafen kann, ohne zu wissen, haha. Ich verwende jQuery validate 1.10 und Microsoft jQuery Unobtrusive Validation 2.0.20710.0, die am 29.01.2013 veröffentlicht wurden.
Ich habe zunächst in jQuery Validate nach der setDefaults-Methode gesucht und sie in Zeile 261 der nicht minimierten Datei gefunden. Alles, was diese Funktion wirklich tut, ist, Ihre json-Einstellungen mit den vorhandenen zusammenzuführen, $.validator.defaults
die initialisiert werden, wobei die ignore-Eigenschaft zusammen mit den anderen in jQuery Validate definierten Standardeinstellungen auf ": hidden" gesetzt wird. An diesem Punkt haben wir also Ignorieren überschrieben. Lassen Sie uns nun sehen, wo auf diese Standardeigenschaft verwiesen wird.
Als ich den Code durchgesehen habe, um zu sehen, wo $.validator.defaults
verwiesen wird. Ich habe festgestellt, dass es nur vom Konstruktor für einen Formularvalidator verwendet wird, Zeile 170 in jQuery validate unminified file.
// constructor for validator
$.validator = function( options, form ) {
this.settings = $.extend( true, {}, $.validator.defaults, options );
this.currentForm = form;
this.init();
};
Zu diesem Zeitpunkt führt ein Validator alle festgelegten Standardeinstellungen zusammen und hängt sie an den Formularvalidator an. Wenn Sie sich den Code ansehen, der die Validierung, Hervorhebung, Hervorhebung usw. durchführt, verwenden alle das Objekt validator.settings, um die Eigenschaft ignore abzurufen. Wir müssen also sicherstellen, dass das Ignorieren mit der setDefaults-Methode festgelegt wird, bevor $ ("form"). Validate () aufgerufen wird.
Wenn Sie Asp.net MVC und das unauffällige Plugin verwenden, werden Sie feststellen, dass die Validierung in document.ready aufgerufen wird, nachdem Sie sich das Javascript angesehen haben. Ich habe auch meine setDefaults im document.ready-Block aufgerufen, der nach den Skripten ausgeführt wird, jquery validate und unauffällig, da ich diese Skripte im HTML-Code vor demjenigen definiert habe, in dem der Aufruf enthalten ist. Mein Aufruf hatte also offensichtlich keinen Einfluss auf die Standardfunktionalität des Überspringens versteckter Elemente während der Validierung. Hier gibt es einige Möglichkeiten.
Option 1 - Sie könnten, wie Juan Mellado betonte, den Aufruf außerhalb des Dokuments haben. Dieser wird bereits ausgeführt, sobald das Skript geladen wurde. Ich bin mir nicht sicher, wann dies geschehen soll, da Browser jetzt in der Lage sind, parallele Skripte zu laden. Wenn ich nur übervorsichtig bin, korrigieren Sie mich bitte. Es gibt wahrscheinlich auch Möglichkeiten, dies zu umgehen, aber für meine Bedürfnisse bin ich diesen Weg nicht gegangen.
Option 2a - In meinen Augen ist es sicher, einfach das $.validator.setDefaults({ ignore: '' });
Innere des document.ready-Ereignisses durch zu ersetzen $("form").data("validator").settings.ignore = "";
. Dadurch wird die Ignoriereigenschaft geändert, die tatsächlich von jQuery validate verwendet wird, wenn jede Validierung Ihrer Elemente für das angegebene Formular durchgeführt wird.
Optionen 2b - Nachdem Sie sich den Code etwas genauer angesehen haben, können Sie auch $("form").validate().settings.ignore = "";
die Ignoriereigenschaft festlegen. Der Grund dafür ist, dass beim Betrachten der Validierungsfunktion überprüft wird, ob über die $.data()
Funktion bereits ein Validatorobjekt für das Formularelement gespeichert wurde . Wenn ein mit dem Formularelement gespeichertes Validatorobjekt gefunden wird, wird nur das Validatorobjekt zurückgegeben, anstatt ein anderes zu erstellen.