In der neuen Version von jQuery Validation Plugin 1.9 wird die Validierung von versteckten Feldern standardmäßig ignoriert . Ich verwende CKEditor für das Textfeld-Eingabefeld und es versteckt das Feld und ersetzt es durch iframe. Das Feld ist vorhanden, aber die Validierung für ausgeblendete Felder ist deaktiviert. Mit dem Validierungs-Plugin Version 1.8.1 funktioniert alles wie erwartet.
Meine Frage ist also, wie man die Validierung für versteckte Felder mit dem Validierungs-Plugin v1.9 aktiviert.
Diese Einstellung funktioniert nicht:
$.validator.setDefaults({ ignore: '' });
jquery-validate
Schamane
quelle
quelle
<input type="text" name="myfield" id="myfield" required="required" style="display: none;">
. Ich musste keine Einstellungen ändern oder etwas Besonderes tun.Antworten:
Der Autor des Plugins sagt, Sie sollten "eckige Klammern ohne Anführungszeichen" verwenden .
[]
http://bassistance.de/2011/10/07/release-validation-plugin-1-9-0/
So ändern Sie diese Einstellung für alle Formulare:
(Es ist nicht erforderlich,
.setDefaults()
dass innerhalb derdocument.ready
Funktion sein)ODER für eine bestimmte Form:
EDIT :
In dieser Antwort erfahren Sie, wie Sie die Validierung für einige ausgeblendete Felder aktivieren, andere jedoch ignorieren.
EDIT 2 :
Bevor Sie Kommentare hinterlassen, dass "dies nicht funktioniert" , denken Sie daran, dass das OP lediglich nach dem jQuery Validate-Plugin fragt und seine Frage nichts damit zu tun hat, wie ASP.NET, MVC oder ein anderes Microsoft-Framework den Normalzustand dieses Plugins ändern können erwartetes Verhalten. Wenn Sie ein Microsoft-Framework verwenden, wird die Standardfunktion des jQuery Validate-Plugins vom Microsoft-
unobtrusive-validation
Plugin überschrieben.Wenn Sie Probleme mit dem
unobtrusive-validation
Plugin haben, lesen Sie stattdessen diese Antwort: https://stackoverflow.com/a/11053251/594235quelle
Dies funktionierte für mich innerhalb einer ASP.NET MVC3-Site, auf der ich das Framework verlassen hatte, um eine unauffällige Validierung usw. einzurichten, falls es für jemanden nützlich ist:
quelle
Stellen Sie sicher, zu setzen
NICHT drinnen
$(document).ready
quelle
$.validator.setDefaults()
er innerhalb oder außerhalb des DOM-Ready- Handers platziert ist. Vergleichen Sie diese jsFiddle mit dieser jsFiddle .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.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.quelle
Dies funktionierte für mich innerhalb einer ASP.NET-Site. Verwenden Sie diesen Code, um die Validierung für einige ausgeblendete Felder zu aktivieren
$("form").data("validator").settings.ignore = ":hidden:not(#myitem)";
Verwenden Sie diese Option, um die Validierung für alle Elemente des Formulars zu aktivieren
$("form").data("validator").settings.ignore = "";
Beachten Sie, dass Sie sie innerhalb verwenden
$(document).ready(function() { })
quelle
ignore: []
Diese Lösung wurde gerade auf der spezifischen Seite für das spezifische Formular hinzugefügt und hat für mich funktioniert.quelle
Das funktioniert bei mir.
quelle
Die Validierung funktionierte bei der Formularübermittlung für mich, führte jedoch nicht die reaktive ereignisgesteuerte Validierung bei der Eingabe in die ausgewählten Auswahllisten durch.
Um dies zu beheben, habe ich Folgendes hinzugefügt, um das von der Bibliothek hinzugefügte jquery-Validierungsereignis manuell auszulösen:
jquery.validate fügt die
.valid
Klasse nun der zugrunde liegenden Auswahlliste hinzu .Vorsichtsmaßnahme: Dies erfordert ein konsistentes HTML-Muster für Ihre Formulareingaben. In meinem Fall wird jede eingegebene Eingabe in a eingeschlossen
div.form-group
, und jede Eingabe hat.form-control
.quelle
Finden Sie einfach den Text ignorieren: ": versteckt" in Ihrer jquery-Validierungsdatei und kommentieren Sie ihn. Nach einem Kommentar verliert es niemals versteckte Elemente, um es zu validieren ...
Vielen Dank
quelle