Wie verhindern Sie, dass ein ENTERTastendruck ein Formular in einer webbasierten Anwendung sendet?
javascript
events
user67722
quelle
quelle
Hier ist ein jQuery-Handler, mit dem Sie die Eingabe von Eingaben stoppen und die Rücktaste -> zurück stoppen können. Die Paare (keyCode: selectorString) im Objekt "keyStop" werden verwendet, um Knoten zuzuordnen, die ihre Standardaktion nicht auslösen sollen.
Denken Sie daran, dass das Web ein zugänglicher Ort sein sollte, was die Erwartungen der Tastaturbenutzer verletzt. In meinem Fall mag die Webanwendung, an der ich arbeite, die Schaltfläche "Zurück" ohnehin nicht. Daher ist das Deaktivieren der Tastenkombination in Ordnung. Die Diskussion "sollte eintreten -> einreichen" ist wichtig, bezieht sich jedoch nicht auf die tatsächlich gestellte Frage.
Hier ist der Code, über den Sie nachdenken können, warum Sie dies tatsächlich tun möchten!
quelle
Geben Sie einfach false vom onsubmit-Handler zurück
oder wenn Sie einen Handler in der Mitte wollen
quelle
submit
Knopfdruck<form>
von vorgelegt bekommt überhaupt ist , das Kind mit dem Bade ausschütten.quelle
e.preventDefault()
anstattreturn false
dasselbe Ziel zu erreichen, aber dem Ereignis zu erlauben, Handler in übergeordneten Elementen zu erreichen. Die Standardaktion (Formularsummierung) wird weiterhin verhindertSie müssen diese Funktion aufrufen, die nur das Standardübermittlungsverhalten des Formulars abbricht. Sie können es an jedes Eingabefeld oder Ereignis anhängen.
quelle
Die EINGABETASTE aktiviert lediglich die Standard-Senden-Schaltfläche des Formulars, die die erste sein wird
Der Browser findet innerhalb des Formulars.
Deshalb habe ich keinen Submit-Button, sondern so etwas
BEARBEITEN : Als Antwort auf die Diskussion in Kommentaren:
Dies funktioniert nicht, wenn Sie nur ein Textfeld haben - aber es kann sein, dass dies in diesem Fall das gewünschte Verhalten ist.
Das andere Problem ist, dass dies auf Javascript beruht, um das Formular einzureichen. Dies kann aus Sicht der Barrierefreiheit ein Problem sein. Dies kann gelöst werden, indem Sie das
<input type='button'/>
mit Javascript schreiben und dann ein<input type='submit' />
in a setzen<noscript>
Tag einfügen. Der Nachteil dieses Ansatzes besteht darin, dass Sie bei Browsern mit Javascript-Deaktivierung bei ENTER Formulare senden müssen. Es ist Sache des OP, zu entscheiden, was in diesem Fall das gewünschte Verhalten ist.Ich kenne keine Möglichkeit, dies zu tun, ohne Javascript aufzurufen.
quelle
Kurz gesagt lautet die Antwort in reinem Javascript:
Dies deaktiviert nur die Tastendruckaktion "Enter" für den Eingabetyp = "Text". Besucher können weiterhin die Eingabetaste auf der gesamten Website verwenden.
Siehe meine ausführliche Antwort auf eine ähnliche Frage hier
quelle
e.target.nodeName === 'INPUT' && e.target.type !== 'textarea'
. Mit dem angegebenen Code können Formulare gesendet werden, wenn ein Radio oder ein Kontrollkästchen aktiviert ist.Alle Antworten, die ich zu diesem Thema hier oder in anderen Beiträgen gefunden habe, haben einen Nachteil, nämlich, dass der eigentliche Änderungsauslöser auch für das Formularelement verhindert wird. Wenn Sie diese Lösungen ausführen, wird das Änderungsereignis ebenfalls nicht ausgelöst. Um dieses Problem zu lösen, habe ich diese Codes geändert und den folgenden Code für mich entwickelt. Ich hoffe, dass dies für andere nützlich wird. Ich habe meinem Formular "Prevent_auto_submit" eine Klasse gegeben und das folgende JavaScript hinzugefügt:
quelle
Ich habe es in der Vergangenheit immer mit einem Tastendruck-Handler wie dem oben genannten gemacht, aber heute habe ich eine einfachere Lösung gefunden. Die Eingabetaste löst nur die erste nicht deaktivierte Senden-Schaltfläche im Formular aus. Alles, was erforderlich ist, ist, diese Schaltfläche abzufangen, die versucht, sie zu senden:
Das ist es. Tastendrücke werden wie gewohnt vom Browser / Felder / usw. behandelt. Wenn die Enter-Submit-Logik ausgelöst wird, findet der Browser diese versteckte Senden-Schaltfläche und löst sie aus. Und der Javascript-Handler verhindert dann die Übermittlung.
quelle
hidden
von attr auf den Eingang wäre kürzer. netter Hack :)Ich habe einige Zeit damit verbracht, diesen Cross-Browser für IE8,9,10, Opera 9+, Firefox 23, Safari (PC) und Safari (MAC) zu erstellen.
JSFiddle-Beispiel: http://jsfiddle.net/greatbigmassive/ZyeHe/
Basiscode - Rufen Sie diese Funktion über "onkeypress" auf, das an Ihr Formular angehängt ist, und übergeben Sie "window.event".
quelle
Dann auf Ihrem Formular:
Es wäre jedoch besser, wenn Sie kein aufdringliches JavaScript verwenden würden.
quelle
charCode
. Ich habe auch dasreturn false
Innere des if-Blocks verschoben . Guter Fang.In meinem Fall hat dieses jQuery-JavaScript das Problem gelöst
quelle
<input>
Felder im Formular aktivieren ?Das Verhindern, dass "ENTER" zum Senden eines Formulars verwendet wird, kann einige Ihrer Benutzer stören. Es ist also besser, wenn Sie die folgenden Schritte ausführen:
Schreiben Sie das Ereignis 'onSubmit' in Ihr Formular-Tag:
Schreiben Sie die Javascript-Funktion wie folgt:
Was auch immer der Grund sein mag, wenn Sie das Senden von Formularen durch Drücken der Eingabetaste verhindern möchten, können Sie die folgende Funktion in Javascript schreiben:
Vielen Dank.
quelle
Dieses Tag zu Ihrem Formular hinzufügen -
onsubmit="return false;"
Dann können Sie Ihr Formular nur mit einer JavaScript-Funktion senden.quelle
Um zu verhindern, dass ein Formular gesendet wird , wenn Sie enterin ein
textarea
oderinput
Feld drücken , überprüfen Sie das Senden-Ereignis, um festzustellen, welcher Elementtyp das Ereignis gesendet hat.Beispiel 1
HTML
jQuery
Eine bessere Lösung ist, wenn Sie keine Senden-Schaltfläche haben und das Ereignis mit einer normalen Schaltfläche auslösen. Es ist besser, weil im ersten Beispiel 2 Übermittlungsereignisse ausgelöst werden, im zweiten Beispiel jedoch nur 1 Übermittlungsereignis ausgelöst wird.
Beispiel 2
HTML
jQuery
quelle
Sie finden dies einfacher und nützlicher: D.
quelle
Wie wäre es mit:
quelle
Bitte überprüfen Sie diesen Artikel. Wie kann verhindert werden, dass die EINGABETASTE gedrückt wird, um ein Webformular zu senden?
quelle
Sie können den Keydown in einem Formular in Javascript einfangen und das gleichmäßige Sprudeln verhindern, denke ich. ENTER auf einer Webseite sendet im Grunde nur das Formular, in dem sich das aktuell ausgewählte Steuerelement befindet.
quelle
Dieser Link bietet eine Lösung, die für mich in Chrome, FF und IE9 funktioniert hat, sowie den Emulator für IE7 und 8, der mit dem IE9-Entwicklertool (F12) geliefert wird.
http://webcheatsheet.com/javascript/disable_enter_key.php
quelle
<script type="text/javascript"> function stopRKey(evt) { var evt = (evt) ? evt : ((event) ? event : null); var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null); if ((evt.keyCode == 13) && (node.type=="text")) {return false;} } document.onkeypress = stopRKey; </script>
Ein anderer Ansatz besteht darin, die Schaltfläche zum Senden der Eingabe nur dann an das Formular anzuhängen, wenn sie gesendet werden soll, und sie beim Ausfüllen des Formulars durch ein einfaches Div zu ersetzen
quelle
Fügen Sie einfach dieses Attribut zu Ihrem FORM-Tag hinzu:
Fügen Sie dann in Ihrem SCRIPT-Tag Folgendes hinzu:
Wenn Sie dann eine Schaltfläche erstellen oder aus einem anderen Grund (wie in einer Funktion) eine Übermittlung zulassen, drehen Sie einfach den globalen Booleschen Wert um und führen Sie einen Aufruf von .submit () aus, ähnlich wie in diesem Beispiel:
quelle
Ich bin selbst darauf gestoßen, weil ich mehrere Submit-Buttons mit unterschiedlichen 'Name'-Werten habe, so dass sie beim Senden unterschiedliche Dinge in derselben PHP-Datei tun. Die Schaltfläche
enter
/return
unterbricht dies, da diese Werte nicht übermittelt werden. Also dachte ich mir, aktiviert die Schaltflächeenter
/return
die erste Schaltfläche zum Senden im Formular? Auf diese Weise könnten Sie eine 'Vanilla'-Senden-Schaltfläche haben, die entweder ausgeblendet ist oder einen' Name'-Wert hat, der die ausführende PHP-Datei auf die Seite mit dem Formular zurückgibt. Oder ein standardmäßiger (versteckter) 'Name'-Wert, den der Tastendruck aktiviert, und die Senden-Schaltflächen werden mit ihren eigenen' Name'-Werten überschrieben. Nur ein Gedanke.quelle
Wie wäre es mit:
Und benennen Sie einfach Ihre Schaltfläche richtig und sie wird weiterhin gesendet, aber Textfelder, dh das explizite Originalziel, wenn Sie in einem die Eingabetaste drücken, haben nicht den richtigen Namen.
quelle
Das hat bei mir funktioniert.
onkeydown = "return! (event.keyCode == 13)"
quelle
So würde ich es machen:
quelle
in eine externe Javascript-Datei einfügen
oder irgendwo innerhalb des Body Tags
quelle
Ich hatte das gleiche Problem (Formulare mit Tonnen von Textfeldern und ungelernten Benutzern).
Ich habe es so gelöst:
Verwenden Sie dies im HTML-Code:
Auf diese Weise
ENTER
funktioniert die Taste wie geplant, es ist jedoch eine Bestätigung (ENTER
normalerweise ein zweites Tippen) erforderlich.Ich überlasse den Lesern die Suche nach einem Skript, das den Benutzer in das Feld sendet, in dem er gedrückt hat,
ENTER
wenn er sich entscheidet, auf dem Formular zu bleiben.quelle