Ich habe ein Formular, in dem sich irgendwo eine Schaltfläche zum Senden befindet.
Ich möchte das Submit-Ereignis jedoch irgendwie "abfangen" und verhindern, dass es auftritt.
Kann ich das auf irgendeine Weise tun?
Ich kann die Schaltfläche "Senden" nicht ändern, da sie Teil eines benutzerdefinierten Steuerelements ist.
javascript
html
forms
Nathan Osman
quelle
quelle
Antworten:
Im Gegensatz zu den anderen Antworten ist die Rückgabe
false
nur ein Teil der Antwort. Stellen Sie sich das Szenario vor, in dem ein JS-Fehler vor der return-Anweisung auftritt ...html
Skript
Die Rückkehr
false
hierher wird nicht ausgeführt und das Formular wird in beiden Fällen gesendet. Sie sollten auch aufrufenpreventDefault
, um die Standardformularaktion für Ajax-Formularübermittlungen zu verhindern.In diesem Fall wird das Formular trotz des Fehlers nicht gesendet!
Alternativ
try...catch
könnte ein Block verwendet werden.quelle
false
direkt von zurückkehrenonsumbit
?(<form onsubmit="return mySubmitFunction(evt)">)
Andernfalls wird ein undefinierter Fehler ausgegeben.Sie können ein Inline-Ereignis
onsubmit
wie dieses verwendenOder
Demo
Dies ist möglicherweise keine gute Idee, wenn Sie große Projekte durchführen. Möglicherweise müssen Sie Ereignis-Listener verwenden.
Bitte lesen Sie mehr über Inline - Events vs Ereignis - Listener (addEventListener und IE attachEvent) hier . Denn ich kann es nicht mehr erklären als Chris Baker .
quelle
<form onsubmit="return false;" >
funktioniert bei mir nicht.Hängen Sie einen Ereignis-Listener mit dem Formular an
.addEventListener()
und rufen Sie die.preventDefault()
Methode aufevent
:Ich denke, es ist eine bessere Lösung als die Definition eines
submit
Ereignishandlers in Übereinstimmung mit demonsubmit
Attribut, da es die Logik und Struktur der Webseite trennt. Es ist viel einfacher, ein Projekt zu verwalten, bei dem Logik von HTML getrennt ist. Siehe: Unauffälliges JavaScript .Die Verwendung der
.onsubmit
Eigenschaft desform
DOM-Objekts ist keine gute Idee, da dadurch verhindert wird, dass Sie einem Element mehrere Übermittlungsrückrufe hinzufügen. Siehe addEventListener vs onclick .quelle
$("button").click(function(e) { e.preventDefault() });
Probier diese...
HTML Quelltext
jQuery-Code
oder
quelle
stopPropagation
war das einzige, was in meinem Fall funktioniert hat. Vielen Dank! :)Folgendes funktioniert ab sofort (getestet in Chrom und Firefox):
Dabei ist validateMyForm () eine Funktion, die zurückgegeben wird,
false
wenn die Validierung fehlschlägt. Der entscheidende Punkt ist die Verwendung des Namensevent
. Wir können zB nicht verwendene.preventDefault()
quelle
quelle
.onsubmit
eine schlechte Idee ist, da Sie dadurch nicht mehreresubmit
Rückrufe an ein Element anhängen können . Ich empfehle die Verwendung.addEventListener()
.Um unauffällige JavaScript- Programmierkonventionen zu befolgen und abhängig davon, wie schnell das DOM geladen wird, empfiehlt es sich möglicherweise, Folgendes zu verwenden:
Verbinden Sie dann Ereignisse mit dem Onload oder DOM bereit, wenn Sie eine Bibliothek verwenden.
Außerdem würde ich immer das
action
Attribut verwenden, da bei einigen Leuten möglicherweise ein Plugin wie NoScript ausgeführt wird, das dann die Validierung unterbricht. Wenn Sie das Aktionsattribut verwenden, wird Ihr Benutzer zumindest vom Server basierend auf der Backend-Validierung umgeleitet. Wenn Sie dagegen so etwas verwendenwindow.location
, werden die Dinge schlecht.quelle
Um zu verhindern, dass das Formular eingereicht wird, müssen Sie dies nur tun.
Durch die Verwendung des obigen Codes wird das Senden Ihres Formulars verhindert.
quelle
Hier meine Antwort:
Ich füge
event.preventDefault();
aufonsubmit
und es funktioniert.quelle
Sie können dem Formular eventListner hinzufügen und Formulardaten wie folgt
preventDefault()
in JSON konvertieren:quelle