jQuery Validierung und tabs
Hallo, ich bin mit jQuery Validierung für Formular-Validierung.
Form ist im inneren Laschen.Wann bekomme ich eine Fehlermeldung füge ich ein icon in der tab, dass Fehler vorhanden sind, um visuell durch den Benutzer
So weit So gut.
Mein problem ist, dass nach Behebung des Fehlers kann ich nicht entfernen, den Fehler in der Registerkarte Symbol.
Ich war der Annahme, dass der validator ist zugänglich über den Erfolg, sondern seine nicht
Unter der Annahme, dass der erste Reiter (tab0) hat 3 Feld für die Validierung (Feld1,Feld2,feld3)
Hier ist der vollständige code
$("form#Form1")
.validate({
invalidHandler: function(form, validator) {
//TAB 0
if (validator.errorMap.field1 != "" && validator.errorMap.field2 != "" && validator.errorMap.field3 != "") {
if ($("#tabs>ul>li").eq(0).find("img").length == 0) {
$("#tabs>ul>li").eq(0).prepend("<img src=\"error.gif\">");
}
}
},
errorClass: "errorField",
errorElement: "p",
errorPlacement: function(error, element) {
var parent = element.parent();
parent.addClass("error");
error.prependTo( parent );
},
//validator in not accessible via success
//so my code its not working
success: function(element,validator) {
var parent = element.parent();
parent.removeClass("error");
$(parent).children("p.errorField").remove();
//TAB 0
if (validator.errorMap.field1 == "" && validator.errorMap.field2 == "" && validator.errorMap.field2 == "") {
if ($("#tabs>ul>li").eq(0).find("img").length == 0) {
$("#tabs>ul>li").eq(0).find("img").remove();
}
}
},
rules: {
field1: { required: true },
field2: { required: true },
field3: { required: true }
}
});
Jede Anregung ist willkommen.
- Sicherlich, wenn der Erfolg der Methode wird aufgerufen, dann werden alle Fehler-icons können versteckt werden?
- Ich weiß nicht, dass dies wichtig sein würde, aber ein Blick in die docs der Erfolg: der Rückruf dauert nur einen parameter.
- Das ist nicht wahr.Wenn man 2 tabs und in jeder tab hat 3 Feld für die Validierung muss ich ausblenden, das Fehler-Symbol nur für die Registerkarte ein, dass Fehler behoben werden.Erfolg heißt für jedes element, das in der Regel option
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie etwa das entfernen des symbols aus allen Registerkarten kurz vor der Validierung.
Wenn die Validierung fehlschlägt, wieder wird es ersetzen Sie das Symbol, wo es nötig ist.
Ich weiß, es ist schon ein paar Monate, aber ich hatte einfach zu handhaben dieses Problem mich und ich glaube, dass ich habe kommen mit einer guten Lösung.
Eher als Deko-tab mit einem Fehler in der
invalidHandler
, verwenden Sie stattdessen diehighlight
undunhighlight
- Handler entsprechend zu markieren, oder unhighlight ist die Registerkarte mit den ungültigen Eintrag. Im Gegensatz zuinvalidHandler
was nicht aufgerufen wird, bis eine Vorlage versucht wird (oder ein manueller Aufruf, um ihn zu bestätigen),highlight
undunhighlight
werden aufgerufen, wenn ein ungültiges Feld verarbeitet wird - einschließlich onBlur.In den obigen code für
highlight
undunhighlight
ich hinzufügen-und entfernen Sie die entsprechende Fehlermeldung und gültige Klassen aus dem ungültiges element (Standard-Verhalten) und dann benutze ich einen (Doppel -) Selektor, um jede<a />
, die Last, die ein element mit div-und ich füge hinzu, oder entfernen Sie die gleichen Klassen auf die Registerkarte link. Dieser code setzt Voraus, dass die Registerkarte Inhalt ist nicht geladen werden mit AJAX und die links, die Last der div haben ein href um div-Anker-ID. Wenn Ihr Registerkarte link-Konfiguration unterscheidet, die Sie haben wahrscheinlich zu zwicken Selektor ein wenig nach Ihren Bedürfnissen.Update
Nach der Prüfung, und einige mehr, die ich identifiziert haben, ein Fallstrick, der zu einem Rückgang der Legitimität der Lösung. Nämlich, dies entfernt die error-Klasse aus der Registerkarte link, unabhängig davon, ob oder nicht es gibt immer noch ungültige Elemente in den tab. Die ungültige Elemente bleiben markiert, aber der Reiter verliert seine Hervorhebung. Ich habe experimentiert mit gangbare workarounds zu diesem Thema und bisher habe ich keinen gefunden. Ich werde diese zu aktualisieren, ob/Wann ich tun.
Folgende Werke für mich. Ich fand, dass die #formID in die erste Auswahl der else-Klausel beschleunigt den code auf belebten Formen.
Ich Kämpfe mit dem gleichen problem, aber haben bis zu... IMHO die real-blocker ist, dass die jQuery-Validierung hat keine
onBeforeValidate
Rückruf. Dies würde ermöglichen es Ihnen, entfernen Sie alle Fehler die Symbole, bevor die überprüfung beginnt und lassen Sie dann die validate() re-ordnen Sie Sie, wenn nötig.Suche an der Quelle, wie es scheint, alles, was er tut, wenn herauszufinden, was zu entfernen, wenn ein Feld gültig ist, sich für die Elemente des entsprechenden Typs mit der richtigen CSS-Klasse. Standardmäßig ist das <label /> " und "Fehler". Also schrieb ich ein paar extra-code auf meiner eigenen errorPlacement Funktion-stick, ein extra label im tab-header, wenn ein Feld ungültig ist, und so lange, wie ich es erstellt richtig, er entfernt Sie für mich, sobald das Feld gültig ist:
Hinweis, dass ich die position der label absolute, so dass Sie einfach sitzen oben auf einander, um für den Anwender gibt es keinen Unterschied zwischen einen Stapel von 10 und nur eine. Die richtige Registerkarte zu markieren, ist herausgefunden, nur durch die Verfolgung der DOM-Baum (Dank Nathan Taylor!), vermutlich, wenn es nicht in einem Register den Selektor ausfallen sollte. Meine tab-Definitionen wie folgt Aussehen:
Ich kam mit einer Lösung, die ich denke, ist sehr sauber und benutzerfreundlich, einfach Fokus die Registerkarte mit dem nächsten Fehler, dies funktioniert so lange, wie Sie Ihre Eingänge bekommen, die Klasse input-validation-Fehler wenn ein Fehler vorliegt, aber Sie können den code ändern, um irgendetwas suchen, hier ist die Funktion:
Dann müssen Sie nur binden, um die form der submit-Ereignis:
Lassen Sie mich wissen Sie Ihre Gedanken.
Erhalten Sie stets die validator Instanz durch aufrufen validate() Methode ohne übergabe von Optionen auf die jquery-Selektor, wo der validator war zuvor konfiguriert. Beachten Sie auch, dass die Erfolgs-callback erhält einen einzelnen parameter verweisen auf die DOM-label, die erstellt wurde, für die ungültige Eingabe. So, Ihr Erfolgs-callback sollte Aussehen wie folgt aus und funktioniert wie erwartet.