Vor einiger Zeit brauchte ich etwas sehr Ähnliches... und ich habe es bekommen.
Also, was ich hier ist, wie ich die Tricks, um ein Formular in der Lage, von JavaScript ohne Validierung und führen Validierung nur, wenn der Benutzer eine Schaltfläche (in der Regel eine Schaltfläche "Senden") drückt gesendet werden.
Für das Beispiel werde ich ein minimales Formular mit nur zwei Feldern und einer Schaltfläche zum Absenden verwenden.
Denken Sie daran, was gewünscht wird: Von JavaScript aus muss es ohne jede Prüfung übermittelt werden können. Wenn der Benutzer jedoch auf eine solche Schaltfläche drückt, muss die Validierung durchgeführt und das Formular nur gesendet werden, wenn es die Validierung besteht.
Normalerweise würden alle in etwa so anfangen (ich habe alles Unwichtige entfernt):
<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 form tag hat keine onsubmit="..."
(Sie erinnern sich, dass es eine Bedingung war, es nicht zu haben).
Das Problem ist, dass das Formular immer abgeschickt wird, unabhängig davon, ob onclick
gibt zurück. true
o false
.
Wenn ich die type="submit"
para type="button"
Es scheint zu funktionieren, tut es aber nicht. Es sendet nie das Formular, aber das kann leicht gemacht werden.
Also habe ich schließlich das hier 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 am function Validator
, donde return True;
ist, füge ich auch einen JavaScript-Übermittlungssatz hinzu, der in etwa so lautet:
function Validator(){
// ...bla bla bla... the checks
if( ){
document.getElementById('theFormID').submit();
return(true);
}else{
return(false);
}
}
El id=""
ist nur für JavaScript getElementById
die name=""
ist nur, dass sie in den POST-Daten erscheint.
Auf diese Weise funktioniert es so, wie ich es brauche.
Ich habe dies nur für Leute, die keine onsubmit
Funktion auf dem Formular, sondern machen einige Validierung, wenn eine Schaltfläche vom Benutzer gedrückt wird.
Warum brauche ich kein onsubmit im Formular-Tag? Einfach, auf andere JavaScript-Teile, die ich brauche, um eine Übermittlung durchführen, aber ich will nicht, dass es keine Validierung sein.
Der Grund: Wenn der Benutzer derjenige ist, der die Übermittlung durchführt, möchte und muss ich die Validierung durchführen, aber wenn es sich um JavaScript handelt, muss ich manchmal die Übermittlung durchführen, während solche Validierungen dies vermeiden würden.
Es mag seltsam klingen, aber nicht, wenn man z.B. an ein Login denkt... mit einigen Einschränkungen... wie z.B. dass keine PHP-Sitzungen verwendet werden dürfen und auch keine Cookies erlaubt sind!
Also muss jeder Link in ein solches Formular umgewandelt werden, damit die Anmeldedaten nicht verloren gehen. Wenn noch kein Login erfolgt ist, muss es auch funktionieren. Es muss also keine Validierung auf Links durchgeführt werden. Aber ich möchte dem Benutzer eine Meldung präsentieren, wenn er nicht beide Felder, Benutzer und Pass, ausgefüllt hat. Wenn also eines fehlt, darf das Formular nicht abgeschickt 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 er gesendet werden können.
Wenn ich die Arbeit an onsubmit
auf dem Formular-Tag, müsste ich wissen, ob es der Benutzer oder ein anderes JavaScript ist. Da keine Parameter übergeben werden können, ist es nicht möglich, direkt, so dass einige Leute eine Variable hinzufügen, um zu sagen, ob die Validierung durchgeführt werden muss oder nicht. Das erste, was die Validierungsfunktion macht, ist, den Wert der Variable zu überprüfen usw... Zu kompliziert, und der Code sagt nicht, was wirklich gewollt ist.
Die Lösung besteht also darin, onsubmit nicht auf dem Formular-Tag zu haben. Sondern dort, wo es wirklich gebraucht wird, nämlich auf der Schaltfläche.
Für die andere Seite, warum setzen onsubmit Code seit konzeptionell ich nicht onsubmit Validierung wollen. Ich möchte wirklich Schaltfläche Validierung.
Der Kodex ist nicht nur klarer, er ist auch da, wo er sein muss. Denken Sie einfach daran: - Ich möchte nicht, dass JavaScript das Formular validiert (das muss immer von PHP auf der Serverseite erledigt werden) - Ich möchte dem Benutzer eine Meldung anzeigen, die besagt, dass alle Felder nicht leer sein dürfen; dafür ist JavaScript erforderlich (clientseitig)
Warum also denken manche Leute (oder sagen mir), dass es auf einer Onsumbit-Validierung beruhen muss? Nein, konzeptionell mache ich keine Onsumbit-Validierung auf der Client-Seite. Ich bin nur etwas auf eine Schaltfläche gedrückt wird, also warum nicht einfach lassen, dass implementiert werden?
Nun, dieser Code und Stil erfüllt den Zweck perfekt. Auf jedem JavaScript, das ich brauche, um das Formular zu senden ich einfach setzen:
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 einfach das Formular und lädt eine andere Seite, usw.
Wenn der Benutzer jedoch auf die Schaltfläche "Senden" (auch bekannt als type="button"
ノット type="submit"
) wird die Validierung durchgeführt, bevor das Formular abgeschickt wird, und wenn es nicht gültig ist, nicht gesendet.
Nun, ich hoffe, dies hilft anderen, nicht lange und komplizierte Codes zu versuchen. Einfach nicht verwenden onsubmit
falls nicht benötigt, und verwenden Sie onclick
. Aber denken Sie daran, zu wechseln type="submit"
a type="button"
und vergessen Sie bitte nicht, die submit()
durch JavaScript.
0 Stimmen
Welche Antwort empfehlen Sie bitte?