if(characterCode == 13)
{
return false; // returning false will prevent the event from bubbling up.
}
else
{
return true;
}
Ok, stellen Sie sich vor, Sie haben das folgende Textfeld in einem Formular:
<input id="scriptBox" type="text" onkeypress="return runScript(event)" />
Um ein "benutzerdefiniertes" Skript in diesem Textfeld auszuführen, wenn die Eingabetaste gedrückt wird und das Formular nicht gesendet wird, finden Sie hier einen Beispielcode . Bitte beachten Sie, dass diese Funktion keine Fehlerprüfung durchführt und höchstwahrscheinlich nur im IE funktioniert. Um dies richtig zu machen, benötigen Sie eine robustere Lösung, aber Sie erhalten eine allgemeine Vorstellung.
function runScript(e) {
//See notes about 'which' and 'key'
if (e.keyCode == 13) {
var tb = document.getElementById("scriptBox");
eval(tb.value);
return false;
}
}
Wenn Sie den Wert der Funktion zurückgeben, wird der Ereignishandler darauf hingewiesen, das Ereignis nicht weiter zu sprudeln, und es wird verhindert, dass das Tastendruckereignis weiter behandelt wird.
HINWEIS:
Es ist schon darauf hingewiesen , dass keyCode
ist jetzt veraltet . Die nächstbeste Alternative which
wurde ebenfalls abgelehnt .
Leider key
weist der bevorzugte Standard , der von modernen Browsern weitgehend unterstützt wird, in IE und Edge ein zweifelhaftes Verhalten auf . Alles , was älter als IE11 würde immer noch einen Bedarf polyfill .
Während die veraltete Warnung in Bezug auf keyCode
und ziemlich bedrohlich which
ist, würde das Entfernen dieser Warnungen eine massive Veränderung für unzählige ältere Websites bedeuten. Aus diesem Grund ist es unwahrscheinlich, dass sie bald irgendwohin gehen.
eval
ist es nicht anders , jemandem ein Textfeld zu geben, das er eingeben kann, und dann den Inhalt durch Drücken einer Schaltfläche zu ändern, als wenn er die Entwicklertools geöffnet und es getan hätte. Wenn dies etwas wäre, das in der Datenbank gespeichert würde und von einem anderen Benutzer geöffnet werden könnte, wäre es eine große Sache, aber das ist ein Problem, das völlig unabhängig von diesem kleinen Ausschnitt ist.keyCode
ist jetzt veraltetVerwenden Sie beide
event.which
undevent.keyCode
:quelle
which
anderekeyCode
. Es ist empfehlenswert, beide einzubeziehen.keydown
Ereignis auch anstelle vonkeyup
orkeypress
Wenn Sie jQuery verwenden:
quelle
preventDefault
scheint aber das Senden des Formulars nicht zu stoppen, zumindest nicht in Chrome.$('input[type=text]').on('keydown', function(e) { if (e.which == 13) { e.preventDefault(); } });
'keydown'
ist richtig, wie die anderen Kommentatoren sagen. Da es nicht geändert wurde, werde ich die Antwort aktualisieren. Ich benutzte diese Antwort und blieb eine Weile stecken, bis ich zurückkam und mir die Kommentare ansah.event.key === "Enter"
Neuere und viel sauberere: verwenden
event.key
. Keine willkürlichen Nummerncodes mehr!Mozilla Docs
Unterstützte Browser
quelle
keyCode
ist veraltet. Dies ist besser lesbar und wartbar als eine magische Ganzzahl in Ihrem CodeErkennungstaste auf dem gesamten Dokument gedrückt drücken:
http://jsfiddle.net/umerqureshi/dcjsa08n/3/
quelle
Überschreiben Sie die
onsubmit
Aktion des Formulars, um Ihre Funktion aufzurufen, und fügen Sie danach return false hinzu, dh:quelle
Eine Reaktionslösung
quelle
Die vielleicht beste Lösung, um so viele Browser wie möglich abzudecken und zukunftssicher zu sein, wäre
quelle
Wenn Sie dies mit einem reinen Java-Skript tun möchten, finden Sie hier ein Beispiel, das perfekt funktioniert
Angenommen, dies ist Ihre HTML-Datei
Verwenden Sie in Ihrer Datei popup.js einfach diese Funktion
quelle
Der folgende Code fügt den Listener für den
ENTER
Schlüssel auf der gesamten Seite hinzu.Dies kann in Bildschirmen mit einer einzigen Aktionstaste sehr nützlich sein, z. B. Anmelden, Registrieren, Senden usw.
In allen Browsern getestet.
quelle
Eine jQuery-Lösung.
Ich bin hierher gekommen, um nach einer Möglichkeit zu suchen, die Formularübermittlung zu verzögern, bis das Unschärfeereignis bei der Texteingabe ausgelöst wurde.
Es wäre schön, eine allgemeinere Version zu erhalten, die alle verzögerten Ereignisse auslöst und nicht nur das Formular.
quelle
Ein aus meiner Sicht viel einfacher und effektiver Weg sollte sein:
quelle
Verwenden Sie TypeScript und vermeiden Sie mehrfache Aufrufe der Funktion
quelle
Ein bisschen einfach
Senden Sie das Formular nicht per Tastendruck "Enter":
Führen Sie die Funktion bei Tastendruck "Enter" aus:
quelle
native js (API holen)
quelle
Fügen Sie diesen Code in Ihre HTML-Seite ein ... er wird deaktiviert ... Eingabetaste ..
quelle
quelle
Browserübergreifende Lösung
Einige ältere Browser haben Keydown-Ereignisse auf nicht standardmäßige Weise implementiert.
which
undkeyCode
sind heutzutage veraltet, aber es tut nicht weh, nach diesen Ereignissen zu suchen, damit der Code für Benutzer funktioniert, die noch ältere Browser wie IE verwenden.Die
isKeyPressed
Funktion prüft, ob die gedrückte Taste eingegeben wurde, und verhindert dasevent.preventDefault()
Senden des Formulars.Minimales Arbeitsbeispiel
JS
HTML
https://jsfiddle.net/tobiobeck/z13dh5r2/
quelle