6

Ich muss ein Handle zu jedem Umstand hinzufügen, wo eine Formularvalidierung fehlschlägt.Ein Ereignis auslösen, wenn Validierungsfehler vorliegen?

ich this gelesen habe, das erklärt, dass ich einen Handler hinzufügen müssen, wie folgt:

$('form').bind('invalid-form.validate', function() { 
    console.log('form is invalid!'); 
}); 

Aber dieses Ereignis nur ausgelöst, wenn ich versuche, das Formular abzuschicken.

Ich muss ein Ereignis behandeln, das jedes Mal abgefeuert wird, wenn das Formular nachvalidiert wird (d. H. Element verliert den Fokus usw.).

Was ich versuche zu erreichen ist, habe ich eine große Form (~ 50 Felder), und es ist in Bootstrap tabs aufgeteilt.
Ich möchte, dass, wenn es neue Validierung Fehler oder Erfolg gibt, setzen oder löschen Sie eine Fehlerklasse in der Registerkarte Titel der Registerkarte, die ungültige/gültige Elemente enthält. P.S. Meine Frage ist nicht, wie diese Klassen in den Tabs gesetzt werden. Ich möchte nur wissen, welche Ereignisse behandelt werden müssen, um bei jeder Validierungszustandsänderung im gesamten Formular benachrichtigt zu werden.

+0

Es gibt kein solches Ereignis von jQuery oder dem Validate-Plugin. Sie müssen ein 'focusout',' blur', 'keyup' usw. an jedes Eingabeelement anhängen und die Methode' .valid() 'verwenden, um das Formular zu testen. – Sparky

+0

@Sparky gibt es ein Ereignis wie 'onvalidated', das vom unauffälligen Validierungs-Plugin bereitgestellt wird? – Shimmy

+0

Ich bin mit dem 'unaufdringlichen' Plugin nicht sehr vertraut. In all den Tausenden von jQuery Validate-Fragen, die ich gesehen habe, habe ich noch nie benutzerdefinierte Ereignisse beschrieben. – Sparky

Antwort

4

Ich muss einen Handler zu jedem Umstand hinzufügen, bei dem die Formularvalidierung fehlschlägt.

$('input, textarea, select').on('focusout keyup', function() { 
    if ($('form').valid()) { 
     // do something 
    } 
}); 

Ich möchte, dass, wenn ein Fehler bei der Überprüfung ist, stellen Sie eine Fehlerklasse auf der Registerkarte Titel, der die ungültigen Elemente enthält.

Nun, das ist ein bisschen anders als das, was Sie ursprünglich gefragt haben. (Ignorieren Sie die erste Hälfte meiner Antwort.)

Verwenden Sie die highlight und unhighlight Optionen zusammen mit jQuery DOM-Traversal und ungesetzt jeder Klasse im DOM setzen Sie es wünschen. highlight wird ausgelöst, wenn etwas ungültig ist und unhighlight ausgelöst wird, wenn es gültig wird. Ein Beispiel ist this answer.

Verwenden Sie the .setDefaults() method, um diese Optionen festzulegen, da Sie das unobtrusive-validation-Plugin verwenden und keinen direkten Zugriff auf die .validate()-Methode haben.

+0

Ich denke, das "Highlight" und "Unhighlight" ist in der Tat, was ich suche. Wie auch immer, kann ich die ursprüngliche "Highlight" -Funktion von der Highlight-Funktion aufrufen, die ich gerade einstelle? [Here] (http://pastebin.com/x5aBLz1s) ist die ursprüngliche Funktion, muss ich es kopieren und in mein Override-Skript einfügen oder existiert es irgendwo? – Shimmy

+1

@Shimmy, was auch immer du da eingibst, wird den Standard überfahren. – Sparky

+1

Mit anderen Worten, Sie müssen die Standardfunktion in Ihre kopieren, wenn Sie das Standardverhalten beibehalten möchten. Dann darauf gebaut, um dein neues Verhalten zu bekommen. – Sparky