Vor einiger Zeit brauchte ich etwas sehr Ähnliches ... und ich habe es bekommen.
Was ich hier schreibe, ist, wie ich die Tricks mache, um ein Formular ohne Validierung von JavaScript senden zu lassen und die Validierung nur auszuführen, wenn der Benutzer eine Schaltfläche drückt (normalerweise eine Senden-Schaltfläche).
Für das Beispiel werde ich ein minimales Formular verwenden, nur mit zwei Feldern und einer Senden-Schaltfläche.
Denken Sie daran, was gewünscht wird: Von JavaScript muss es ohne Überprüfung eingereicht werden können. Wenn der Benutzer jedoch eine solche Taste drückt, muss die Validierung durchgeführt und das Formular nur gesendet werden, wenn die Validierung bestanden wurde.
Normalerweise würde alles von etwas in der Nähe beginnen (ich habe alle zusätzlichen Dinge entfernt, die nicht wichtig sind):
<form method="post" id="theFormID" name="theFormID" action="">
<input type="text" id="Field1" name="Field1" />
<input type="text" id="Field2" name="Field2" />
<input type="submit" value="Send" onclick="JavaScript:return Validator();" />
</form>
Sehen Sie, wie das Formular-Tag kein hat onsubmit="..."
(denken Sie daran, dass es eine Bedingung war, es nicht zu haben).
Das Problem ist, dass das Formular immer gesendet wird, egal ob onclick
zurückgegeben true
oder false
.
Wenn ich mich type="submit"
für wechsle type="button"
, scheint es zu funktionieren, funktioniert aber nicht. Das Formular wird nie gesendet, dies ist jedoch problemlos möglich.
Also habe ich endlich folgendes benutzt:
<form method="post" id="theFormID" name="theFormID" action="">
<input type="text" id="Field1" name="Field1" />
<input type="text" id="Field2" name="Field2" />
<input type="button" value="Send" onclick="JavaScript:return Validator();" />
</form>
Und function Validator
wo, wo return True;
ist, füge ich auch einen JavaScript-Submit-Satz hinzu, ähnlich wie dieser:
function Validator(){
// ...bla bla bla... the checks
if( ){
document.getElementById('theFormID').submit();
return(true);
}else{
return(false);
}
}
Das id=""
ist nur für JavaScript getElementById
, das name=""
ist nur für das Erscheinen in POST-Daten.
Auf diese Weise funktioniert es wie ich brauche.
Ich stelle dies nur für Personen ein, die keine onsubmit
Funktion im Formular benötigen , aber eine Validierung vornehmen, wenn eine Taste vom Benutzer gedrückt wird.
Warum brauche ich kein Onsubmit auf Formular-Tag? Einfach, bei anderen JavaScript-Teilen muss ich eine Übermittlung durchführen, aber ich möchte nicht, dass es eine Validierung gibt.
Der Grund: Wenn der Benutzer derjenige ist, der die Übermittlung durchführt, möchte und muss die Validierung durchgeführt werden, aber wenn es sich um JavaScript handelt, muss ich die Übermittlung manchmal durchführen, während solche Validierungen dies vermeiden würden.
Es mag seltsam klingen, aber nicht, wenn man zum Beispiel denkt: bei einem Login ... mit einigen Einschränkungen ... wie PHP-Sitzungen nicht verwenden zu dürfen und keine Cookies erlaubt sind!
Daher muss jeder Link in ein solches Formular konvertiert werden, damit die Anmeldedaten nicht verloren gehen. Wenn noch keine Anmeldung erfolgt ist, muss es auch funktionieren. Daher muss keine Validierung für Links durchgeführt werden. Ich möchte dem Benutzer jedoch eine Nachricht präsentieren, wenn der Benutzer nicht beide Felder, Benutzer und Pass, eingegeben hat. Wenn eines fehlt, darf das Formular nicht gesendet werden! da ist das Problem.
Siehe das Problem: Das Formular darf nicht gesendet werden, wenn ein Feld leer ist, nur wenn der Benutzer eine Schaltfläche gedrückt hat. Wenn es sich um einen JavaScript-Code handelt, muss es gesendet werden können.
Wenn ich onsubmit
an dem Formular-Tag arbeite , muss ich wissen, ob es sich um den Benutzer oder ein anderes JavaScript handelt. Da keine Parameter übergeben werden können, ist dies nicht direkt möglich. Einige Benutzer fügen daher eine Variable hinzu, um festzustellen, ob eine Validierung durchgeführt werden muss oder nicht. Das erste, was bei der Validierungsfunktion der Fall ist, ist, diesen Variablenwert usw. zu überprüfen. Zu kompliziert und der Code sagt nicht aus, was wirklich gewünscht wird.
Die Lösung besteht also nicht darin, das Formular-Tag erneut einzureichen. Insead legte es dort, wo es wirklich gebraucht wird, auf den Knopf.
Auf der anderen Seite, warum Onsubmit-Code setzen, da ich konzeptionell keine Onsubmit-Validierung möchte. Ich möchte wirklich eine Tastenüberprüfung.
Der Code ist nicht nur klarer, er muss auch dort sein, wo er sein muss. Denken Sie daran: - Ich möchte nicht, dass JavaScript das Formular validiert (dies muss immer von PHP auf der Serverseite durchgeführt werden). - Ich möchte dem Benutzer eine Meldung anzeigen, dass alle Felder nicht leer sein dürfen und JavaScript (Client) benötigen Seite)
Warum müssen einige Leute (denken oder sagen Sie es mir) eine Onsumbit-Validierung durchführen? Nein, konzeptionell mache ich keine Onsumbit-Validierung auf Client-Seite. Ich mache nur etwas auf Knopfdruck. Warum also nicht einfach das implementieren lassen?
Nun, dieser Code und Stil machen den Trick perfekt. Auf jedem JavaScript, das ich zum Senden des Formulars benötige, habe ich gerade Folgendes eingegeben:
document.getElementById('theFormID').action='./GoToThisPage.php'; // Where to go
document.getElementById('theFormID').submit(); // Send POST data and go there
Und das überspringt die Validierung, wenn ich sie nicht brauche. Es sendet nur das Formular und lädt eine andere Seite usw.
Wenn der Benutzer jedoch auf die Schaltfläche " Senden" klickt (auch bekannt als " type="button"
Nicht" type="submit"
), erfolgt die Validierung, bevor das Formular gesendet und, falls nicht gültig, nicht gesendet wird.
Ich hoffe, dies hilft anderen, langen und komplizierten Code nicht auszuprobieren. Nur nicht verwenden, onsubmit
wenn nicht benötigt, und verwenden onclick
. Aber denken Sie daran, type="submit"
zu JavaScript zu wechseln , type="button"
und vergessen Sie bitte nicht, dies submit()
per JavaScript zu tun .