jQuery-Validierung - Änderung "Erforderlich" - Attribut wird basierend auf anderen Felder
Bin ich mit dem jQuery-Validation-plugin (http://docs.jquery.com/Plugins/Validation) auf eine form, die ich Baue. Die form besteht aus 6 fieldsets, die jeweils 3 text-Eingänge für einen E-Mail-Adresse, einen Vornamen und einen Nachnamen. Eine vereinfachte version der markup sollte so Aussehen:
<form id="ref" action="submit.php" method="post">
<fieldset id="ref_1">
<input id="ref_1_email" type="text" />
<input id="ref_1_fname" type="text" />
<input id="ref_1_lname" type="text" />
</fieldset>
<fieldset id="ref_2">
<input id="ref_2_email" type="text" />
<input id="ref_2_fname" type="text" />
<input id="ref_2_lname" type="text" />
</fieldset>
<fieldset id="ref_3">
<input id="ref_3_email" type="text" />
<input id="ref_3_fname" type="text" />
<input id="ref_3_lname" type="text" />
</fieldset>
</form>
und so weiter, bis zu ref_6. Der Benutzer ist jedoch nicht unbedingt notwendig ist, um jedes Feld können Sie nur dann wählen, zu füllen, die Eingänge im inneren fieldset#ref_1 und fieldset#ref_2, und lassen Sie das andere leer. Aber wenn Sie eingeben, zum Beispiel, eine E-Mail für ref_1, einen ersten und letzten Namen für ref_1 erforderlich wäre, auch. Also, was ich tun müssen, ist überprüfen alle 3 Eingänge in einem fieldset. Wenn Sie leer sind, können Sie ignoriert werden, aber wenn einer der Eingänge ist gefüllt, es geht um zwei Nachbarn, die abgeschlossen werden müssen auch. Alle meine versuche waren bisher sehr umständlich (gerade für eine änderung, die auf jedes und dann auswerten, um zu sehen, wenn Sie leer sind...), jede Hilfe wäre sehr, sehr dankbar.
Dank
Update:
Fand ich einen Beitrag mit einem ähnlichen Problem, mit der vorgeschlagenen Lösung:
$('#emailToName2').keyup(function () {
$('#emailToAddress2').toggleClass('required', $(this).val());
});
Aber das erfordert die obige Logik dupliziert, für jede und jeden ein, das scheint wie overkill zu mir. Was wäre ein dynamischer Ansatz?
Prost!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie eine Ausdruck oder Rückruf bei der Angabe, dass ein Feld erforderlich ist. Die Validierung plugin wird dann den Ausdruck auszuwerten oder Rückruf vor der Validierung das Feld.
Hier ein Beispiel:
Wahrscheinlich gibt es einige Refactorings, die Sie tun können, so dass Sie nicht haben, um alle wiederholen dies für jedes Feld...
blur
event-handler funktionieren...Schreiben Sie Ihre eigene benutzerdefinierte Gültigkeitsprüfung-Klasse, bewertet, wenn die anderen beiden die 2 Eingänge sind abgeschlossen.
zB.
Diese wird ausgewertet, wenn eines der Geschwister-Eingänge haben einen Wert und wenn Sie es tun, macht der Aufruf von Eingabe erforderlich.
Nicht ausprobiert habe und weder richtig geschrieben:
Kannst du nicht alles in eine Schleife, da Sie brauchen, um zu überprüfen, Geschwister, bevor der Wechsel der Klasse. Sie können Sie jedoch definieren, eine kleine Schleife, Funktion, prüfen und anwenden, aber du musst es mehrmals zu pflegen Logik.
Versuchen Sie dies:
Wurde nur untersucht dieses für ein Projekt. Laut der docs, der sollte Folgendes tun, was Sie wollen.
Beim ersten Aufruf
validate
auf Ihre form, machen Sie es wie diese:Stellen Sie außerdem sicher, dass jeder Ihrer
input
s hat einename
- Attributs identisch zu seinemid
.Habe ich nicht wirklich selber ausprobiert, aber die Beurteilung durch die docs (siehe
required(dependency-expression)
), sollte es funktionieren.