webentwicklung-frage-antwort-db.com.de

JQuery.Validate fügt dynamische Regeln mit Nachrichten hinzu

Ich habe ein Formular, auf dem ich jquery.validate verwende. Ich rufe zunächst validieren mit einer Reihe von Regeln und benutzerdefinierten Nachrichten auf ...

$("#formName").validate( {
  rules: {
    myExistingInput: {
      required: true
    }
  },
  messages: {
    myExistingInput: {
      required: "Enter something"
    }
  },
  ignore: null, // include hidden fields (see below)
  submitHandler: function(form) {
    // do stuff
  },
  invalidHandler: function(event, validator) {
    // do stuff (some of the fields may have been hidden by a collapsible panel
    // if there is an error on one of those fields, expand the panel so the error
    // becomes visible)
  }
});

Später füge ich dem Formular dynamisch Felder hinzu und füge auch Regeln für diese Felder hinzu ...

$("#formName").append(...);

$("#newInputName").rules("add", {
  required: true,
  messages: {
    required: "Enter something else"
  }
});

Wenn ich das Formular dann absende, erhalte ich eine Fehlermeldung aus jquery.validate ...

Beim Überprüfen des Elements newInputName ist eine Ausnahme aufgetreten. Überprüfen Sie die 'messages' method.TypeError: Die Eigenschaft 'call' von .__ kann nicht abgerufen werden. undefinierte oder Nullreferenz

Beim Debuggen im Browser kann ich sehen, dass der Fehler innerhalb der Funktion "check" ausgelöst wird und dass die Variable "method" auf "messages" gesetzt ist.

Wenn ich die Nachrichten aus dem Aufruf zu Regeln entferne ("Hinzufügen", ...

$("#newInputName").rules("add", {
  required: true
});

es funktioniert wie erwartet, aber offensichtlich habe ich jetzt keine benutzerdefinierten Fehlermeldungen. 

Ich habe hier auf SO viele Beispiele gesehen, die zeigen, dass meine Syntax korrekt ist. Irgendwelche Vorschläge?

BTW: jQuery Validation Plugin - v1.11.0 - 2/4/2013

17
Martin Robins

Ihr Code scheint fehlerfrei zu funktionieren, wie Sie ihn gepostet haben.

DEMO mit DOM bereit: http://jsfiddle.net/UZTnE/

DEMO mit PageInit & jQuery Mobile: http://jsfiddle.net/xJ3E2/

$(document).on("pageinit", function () {

    $('#myform').validate({ // initialize the plugin
        rules: {
            field1: {
                required: true
            }
        },
        messages: {
            field1: {
                required: "Enter something"
            }
        }
    });

    $('[name*="field"]').each(function () {
        $(this).rules('add', {
            required: true,
            messages: {
                required: "Enter something else"
            }
        });
    });

});

HTML:

<form id="myform">
    <input type="text" name="field1" />
    <input type="text" name="field2" />
    <input type="submit" />
</form>

&UUML;BRIGENS:

diese...

ignore: null, // include hidden fields

sollte sein...

ignore: [], // include hidden fields

Siehe: jQuery Validate - Validierung für ausgeblendete Felder aktivieren

22
Sparky

$(document).ready(function(){
  $("#controlId").rules("add", {
     required : true,
     messages : { required : 'field is required.' }
  });
});

4

als Antwort auf dieses alte Problem möchte ich, dass die Messwerte im Regelobjekt enthalten sind.

Nachdem Sie die Regeln hinzugefügt haben, können Sie Nachrichten wie die folgenden hinzufügen:

var inputRules = $('input').rules();
inputRules.messages = {required: 'your message'};

enter image description here

Viel Glück!

0
Eagle_one