jQuery über mehrere Felder hinweg validieren

Lesezeit: 3 Minuten

jQuery uber mehrere Felder hinweg validieren
Faiyet

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

jQuery uber mehrere Felder hinweg validieren
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"
    }
});

Funktionierende DEMO: http://jsfiddle.net/hBXL6/


BEARBEITEN:

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.

$('input[name="adults"], input[name="children"]').on('keyup focusout', function() {
    $('input[name="attendees"]').valid();
});

Neue funktionierende DEMO: http://jsfiddle.net/ua0534dv/2/

  • Gibt es dafür eine Parameterbegrenzung?

    – Zitrone

    10. Oktober 2014 um 15:23 Uhr

  • @Limon, keine Begrenzung der Anzahl der mir bekannten Parameter.

    – Funkelnd

    10. Oktober 2014 um 15:27 Uhr

  • @ user2956826 hat Recht – das Ändern der Felder für Erwachsene/Kinder führt keine erneute Validierung der Teilnehmer durch.

    – Wahrer Wille

    31. Dezember 2016 um 23:28 Uhr

1647176470 62 jQuery uber mehrere Felder hinweg validieren
Leobard

Die Antwort von Sparky ist nicht vollständig: die adults und children erneut validieren müssen attendees wenn geändert.

Fügen Sie dies am Ende hinzu:

$('input[name=adults],input[name=children]').on('change', function(){
  $('input[name=attendees]').removeData("previousValue").valid();
});

  • 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

997730cookie-checkjQuery über mehrere Felder hinweg validieren

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy