Hinweis:
Diese Frage bezieht sich auf eine sehr alte Version von jQuery.validate() (Version 1.5). Dieses Plugin bietet jetzt eine integrierte Lösung dafür: das , das stattdessen verwendet werden sollte. Ich lasse diese Frage und die Antwort in ihrer ursprünglichen Form für historische Zwecke für jeden, der eine Legacy-Site pflegen muss, die nicht auf die neuesten Versionen von jQuery und jQuery.validate() upgraden kann.Wie kann ich jQuery-Validierungsregeln von einer Seite hinzufügen, entfernen oder austauschen?
Ich habe ein Formular, das schaltet, welche Eingabeelemente sichtbar sind. Ich möchte nur die sichtbaren Elemente auf dem Formular validieren.
Ich habe es schwer, dies richtig funktionieren zu lassen. Ich möchte Validatoren für nicht sichtbare Elemente deaktivieren und ich kann nicht den besten Weg finden, dies zu tun. Jeder Einblick, was mit meinem Code oder meiner Vorgehensweise falsch ist, würde geschätzt werden.
Wenn Sichtbarkeit umgeschaltet wird, ich habe ein paar Dinge ausprobiert:
$("form").rules("remove")
Aufruf an alle Regeln bestehenden Validierung zu löschen. Dies löst eine "undefinierte" JavaScript-Ausnahme aus.- Aufruf
$("form").validation(...options...)
für die sichtbaren Elemente, in der Hoffnung, dies würde die Regeln überschreiben. Dies ermöglicht nur der ersten Gruppe, die validiert ist zu arbeiten. Das zweite Panel kann nicht validiert werden. - Den Submit-Handler vor dem Aufruf der neuen
validation()
-Methode trennen. Das hat nicht getan, was ich gedacht hätte. Es entfernt alle (scheinbar) dauerhaften Überprüfungen und das Formular wird ohne Validierung übergeben. - Löschen Sie das Validierungsobjekt mit
$.removeData($('form'), 'validator')
, bevor Sie versuchen, den Validator erneut aufzurufen. Dies funktioniert auch nicht. - Dies ist in einer ASP.NET-Site, so dass die Verwendung mehrerer
<form />
Tags nicht in Frage ist, da dies die Seite brechen würde.
Ich bin irgendwie ratlos, wie ich diese Arbeit machen kann. Sie können eine vollständige funktionierende Demo von dem, was ich habe, unter http://jsbin.com/ucibe3
sehen, oder bearbeiten Sie es unter http://jsbin.com/ucibe3/edit
. Ich habe versucht, es auf nur den Code zu entfernen, der den Fehler verursacht.
Hier sind die wichtigsten Stücke meines Codes (Verwendung obigen Links für komplette Arbeits Seite)
HTML:
<td id="leftform">
Left Form<br />
Input 1: <input type="text" name="leftform_input1" /><br />
Input 2: <input type="text" name="leftform_input2" /><br />
<input type="submit" name="leftform_submit" value="Submit Left" />
</td>
<td id="rightform" style="visibility:hidden">
Right Form<br />
Input 1: <input type="text" name="rightform_input1" /><br />
Input 2: <input type="text" name="rightform_input2" /><br />
<input type="submit" name="rightform_submit" value="Submit Right" />
</td>
JavaScript:
$('#toggleSwitch').click(function() {
if ($('#leftform').css("visibility") !== "hidden") {
$('#leftform').css("visibility", "hidden");
$('#rightform').css("visibility", "visible");
$('form').validate({
rules: {
rightform_input1: { required: true },
rightform_input2: { required: true }
},
messages: {
rightform_input1: "Field is required",
rightform_input2: "Field is required"
}
});
} else {
$('#rightform').css("visibility", "hidden");
$('#leftform').css("visibility", "visible");
$('form').validate({
rules: {
leftform_input1: { required: true },
leftform_input2: { required: true }
},
messages: {
leftform_input1: "Field is required",
leftform_input2: "Field is required"
}
});
}
});
Sorry, ich habe die Marke mit der anderen Antwort verpasst, ich habe einen Link zu einer möglichen Lösung in meinem Beitrag hinzugefügt - Hoffe es hilft. –
2014 - mehrere Validator-Plugins existieren jetzt und obwohl ich eine fundierte Vermutung machen kann, ist es nicht klar, auf welches Plugin sich diese Frage bezieht. Eine Verknüpfungsschrift wäre nützlich. –
@ Roamer-1888 Guter Punkt. Ich habe die Frage und die Antwort aktualisiert, um das Plugin sowie die Version anzugeben, auf die es angewendet wird, da sich diese Frage & Antwort auf eine veraltete Version des Plugins bezieht und nicht mehr so relevant ist. –