Ich habe 3 Eingabefelder, die nach der Anzahl der Personen fragen, und davon, wie viele Erwachsene und wie viele Kinder sind. Ich versuche, das jQuery-Validierungs-Plugin zu verwenden, um eine benutzerdefinierte Methode hinzuzufügen, bei der Kinder + Erwachsene = Anzahl der Personen
Das ist mein Validierungsanruf
$("#form2").validate({
errorElement: "span",
rules: {
attendees: {
required: true,
digits: true
},
adults: {
required: true,
digits: true
},
children: {
required: true,
digits: true
}
},
messages: {
attendees: "Enter the number of persons (including yourself)",
adults: "Enter number of adults",
children: "Enter number of childern"
}
});
Ich habe mir die Gruppenfunktion angesehen und .addMethod() Methode des Validierungs-Plugins, aber es scheint, dass es nur mit Blick auf ein Element erstellt wurde. Irgendwelche Ideen?
Du könntest es in einen werfen .each() Aussage vielleicht?
– Sterling Archer
4. September 2013 um 1:40 Uhr
Ich würde vorschlagen, die Teilnehmereingabe vollständig zu überspringen, wenn Sie eine Einschränkung festlegen möchten, die Gesamt = Erwachsener + Kinder. Verwenden Sie stattdessen ein verstecktes Feld „Gesamt“, dessen Wert kurz vor dem Absenden des Formulars auf Kinder + Erwachsene aktualisiert werden sollte.
– Neeraj
4. September 2013 um 1:56 Uhr
Funkelnd
Folgen die Dokumentation zum Erstellen einer benutzerdefinierten Methode/Regel. Hier nenne ich es einfach totalCheckaber Sie können es beliebig benennen.
$.validator.addMethod('totalCheck', function(value, element, params) {
var field_1 = $('input[name="' + params[0] + '"]').val(),
field_2 = $('input[name="' + params[1] + '"]').val();
return parseInt(value) === parseInt(field_1) + parseInt(field_2);
}, "Enter the number of persons (including yourself)");
Sie wird wie jede andere Regel implementiert. Die beiden Parameter sind die name Attribute der beiden anderen Felder, die Sie prüfen möchten. Da diese neue Regel besagt, dass das Feld die Summe der beiden anderen Felder enthalten muss, die required und digits Regeln sind jetzt überflüssig und können entfernt werden.
$("#form2").validate({
errorElement: "span",
rules: {
attendees: {
totalCheck: ['adults', 'children'] // <-- your custom rule
},
adults: {
required: true,
digits: true
},
children: {
required: true,
digits: true
}
},
messages: {
adults: "Enter number of adults",
children: "Enter number of childern"
}
});
Ein hinzugefügt keyup focusout Handler erneut zu validieren attendees wenn andere Felder geändert werden. Dies sind die gleichen zwei Standard-Event-Handler, die vom Plug-in verwendet werden.
Ich habe Ihre Idee in meine Antwort aufgenommen. Kein Bedarf für removeData() da wurde in diesem Code nichts mit gesetzt .data(); und sein sollte keyup und focusout Sie erhalten also eine dynamische Validierung, genau wie die Standardeinstellungen des Plugins.
– Funkelnd
19. Juli 2019 um 20:11 Uhr
Wie in den Kommentaren angedeutet, ist dies keine gute Praxis. Falls du es trotzdem machen willst:
$("#form2").validate({
errorElement: "span",
rules: {
attendees: {
equal: $("#form2 #adults").val() + $("#form2 #children").val();
},
adults: {
required: true,
digits: true
},
children: {
required: true,
digits: true
}
},
messages: {
attendees: "Enter the number of persons (including yourself)",
adults: "Enter number of adults",
children: "Enter number of childern"
}
});
Es gibt keine solche aufgerufene Methode oder Regel equal.
– Funkelnd
4. September 2013 um 14:09 Uhr
9977300cookie-checkjQuery über mehrere Felder hinweg validierenyes
Du könntest es in einen werfen
.each()
Aussage vielleicht?– Sterling Archer
4. September 2013 um 1:40 Uhr
Ich würde vorschlagen, die Teilnehmereingabe vollständig zu überspringen, wenn Sie eine Einschränkung festlegen möchten, die Gesamt = Erwachsener + Kinder. Verwenden Sie stattdessen ein verstecktes Feld „Gesamt“, dessen Wert kurz vor dem Absenden des Formulars auf Kinder + Erwachsene aktualisiert werden sollte.
– Neeraj
4. September 2013 um 1:56 Uhr