onsubmit mehrere javascript-Funktionen
Weiß jemand, wie onsubmit mehrere Funktionen? Was ich Gegenaktionen zu tun war: "onsubmit" prüft, ob alle diese Funktionen geben true zurück, wenn alle return true, dann Mach ich die action="checked.html"
<form id="myForm" name="myForm" action="checked.html" method="post"
onsubmit="return validateName() || validatePhone() || validateAddress() ||
validateEmail()">
Jedoch, was tatsächlich passiert war, überprüft der computer, dass der code von Links nach rechts, und das Ergebnis der nächsten Funktion ersetzt die Vorherige, und so weiter, bis zum Ende. Also, auch wenn alle die ersten 3 Funktionen false zurück, so lang wie das Letzte ist wahr, der computer ausgeführt wird action="checked.html", das ist nicht das, was ich Gegenaktionen zu tun... kann jemand bitte helfen Sie mir auf diesem, es war wie 4 Stunden versuche ich es zu beheben :S Danke!
Auch, wenn ich versuchte, etwas zu tun, wie <form onsubmit="return verify1() && verify2()">
funktioniert es nicht, alle es tut, ist zu überprüfen, verify1(), und nicht die folgenden... 🙁
CLARIFCATION: Auf submit, möchte ich vier Validierungs-Funktionen aufgerufen werden. Einreichen sollte vermieden werden, es sei denn, alle vier Funktionen geben true zurück, aber alle vier sollte immer aufgerufen werden, auch wenn einige von Ihnen den Wert false zurück.
- Sie können direkt zu schreiben-Funktion anstelle der Verwendung ODER und UND operator,Wie onsubmit="return validateName();validatePhone();validateaddress ein();validateEmail();"
- wie auf der Erde könnte das funktionieren? sobald validateName gibt true zurück, wird das Formular Einreichen
- Ich glaube nicht, dass Sie das tun können. Es wird einfach nur wieder die erste Funktion führen.
- Die booleschen Operatoren || und && haben einen Kurzschluss-Mechanismus. Für ||, wenn der erste operator true ist, wird der ganze Ausdruck wahr sein muss. Warum also check die zweite-operator? Für &&, wenn der erste operator false ist, wird der ganze Ausdruck falsch sein muss.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
&
statt&&
.&&
verwendet short-circuit-evaluation und so nicht auswerten der rechten Operanden, wenn der linke operand ist falsy.&
wertet immer beide Operanden aus.EDIT: Sorry, ich vergaß, dass
&
nicht zurückkehren, eine tatsächliche boolean. Wickeln Sie den Ausdruck in Klammern und verwenden Sie ein doppelt!
zu konvertieren, wie (jetzt) angezeigt. (Sie würden nicht sorgen müssen, wenn Sie das Ergebnis in einerif
testen, aber der Rückgabewert aus der event-handler sollte ein boolean.)P. S.: Hier ist ein ziemlich klobig demo, um zu zeigen, dass alle vier Funktionen aufgerufen werden, aber produzieren die insgesamt-true oder false Ergebnis, das Sie brauchen: http://jsfiddle.net/nnnnnn/svM4h/1/
&
Ihren Anforderungen entspricht.) Besser für die Anzeige einer Alarm am Ende eine Zusammenfassung aller Fehler. Oder markieren Sie die ungültigen Felder mit einer anderen Farbe und zeigt eine Meldung den Benutzer auffordert, korrigieren Sie diese Felder.Ändern Sie Ihren code so verwenden UND statt ODER
Der Grund dafür ist, dass, wenn Sie verwenden ODER einmal, die erste Funktion gibt true zurück, javascript nicht die Mühe zu prüfen, die anderen Funktionen. Auch Sie wollen nicht zu verwenden, ODER, weil, wenn der erste Scheck war falsch und die zweite wahr ist, wird das Formular trotzdem Einreichen, da mindestens eine der Prüfungen WAHR ist.
Sehen fiddle zeigen, dass dies funktioniert, beide Prüfungen ausführen und zeigen eine Warnmeldung, aber da check2 false zurück, wird das Formular nicht Absenden - wenn Sie möchten, spielen Sie mit der return-Ergebnisse der checks1 und check2 Funktionen und die Verwendung von && und ||
Nach dem Verständnis, das problem besser zu verwenden, benötigen Sie einen single - &, aber da
true & true
1 zurück und nichttrue
Sie brauchen, um es zu schreiben, wie dieswenn alles, was Sie brauchen, ist sicherzustellen, dass alle Funktionen geben true zurück, bevor Sie fortfahren, dann verwenden Sie
&&
nicht||
und zu versichern, dass der Ausdruck nicht ausgewertet pre-maturally durch die return-Funktion setzen einige zusätzlichen Klammerntrue
, dann machen Sie separate Anweisungen undreturn
nur das Letzte Ergebnis --onsubmit="validateName(); validatePhone(); validateAddress(); return validateEmail();"
Erstellen Sie eine wrapper-Funktion, die den Aufruf jeder Funktion und prüft Ihren Wert zurückgeben. Zu jeder Zeit, wenn der return Wert false ist, können Sie entweder stoppen Sie die form Einreichen, indem Sie false zurückgeben, oder bewerten Sie den rest der Dinge, und schließlich den Wert false zurück.
So JS einen code, der wird das tun, was Sie wollen, ist :
Nun in der form einfach verwenden :
Hier ist eine funktionierende JSFiddle Beispiel.
BEARBEITEN : Made a boo boo unten korrigiert.
Nutzung ODER falsch war, aber der Grund ist UND nicht funktioniert, wie Sie erwarten, ist, weil der Kurz-circuit_evaluation.
onsubmit="return validateName() && validatePhone() && validateaddress ein() && validateEmail()"
verwenden Sie diesen code
Zur Validierung meiner form habe ich einfach erstellt eine Funktion namens validateForm(){} dann in dieser Funktion setze ich den code, welcher benötigt wird für die volle Validierung. Dann verwendet onsubmit="validateForm()". Prüft es, durch Sie in Ordnung ist und nur sendet, wenn alle Bedingungen erfüllt sind.
Folgende Methode zunächst überprüft werden, validateName () - Funktion und es wird den Prozess überprüfen, nächste Funktion, wenn nur die erste Funktion true ist, ist auch Feuer Dritte Funktion muss true zurückgeben, Erster & zweite Funktion. Also Stell dir vor, wenn alle Funktionen sind ungültig & auch haben Sie verschiedene Fehlermeldung, die Sie sehen nur die Fehlermeldung der ersten Funktion. Einmal validateName () - Funktion übergeben, sehen Sie möglicherweise die Fehlermeldung validatePhone() ect.
Können Sie nicht verwenden, wenn Sie gehen, um zu zeigen Fehlermeldungen nach oben alle Validierungen auf den ersten submit & Sie können verwenden Sie folgende Methode, wenn Sie möchten, Feuer-all-Funktion (oder Anzeige aller Fehler) auf "Absenden".