Gibt es ein Ereignis in Jquery, das nur ausgelöst wird, wenn der Benutzer die Eingabetaste in einem Textfeld drückt? Oder ein Plugin, das hinzugefügt werden kann, um dies einzuschließen? Wenn nicht, wie würde ich ein schnelles Plugin schreiben, das dies tun würde?
JQuery-Ereignis für Benutzer, der in einem Textfeld die Eingabetaste drückt?
Ali
Jishnu AP
Sie können Ihr eigenes benutzerdefiniertes Ereignis verdrahten
$('textarea').bind("enterKey",function(e){
//do stuff here
});
$('textarea').keyup(function(e){
if(e.keyCode == 13)
{
$(this).trigger("enterKey");
}
});
-
Es ist erwähnenswert, dass in einem Szenario der Enter-Erkennung zur Verhinderung der Formularübermittlung das „keyup“-Ereignis nicht optimal ist, da das Formular die Übermittlung bei gedrückter Taste erkennt. Daher könnte “Tastendruck” oder “Tastendruck” in diesem Fall besser sein.
– TechNyquist
12. April 2017 um 8:19 Uhr
-
Beachten Sie, dass bind() in jQuery 3.0 veraltet ist.
– Bart Friedrichs
10. März 2018 um 12:03 Uhr
-
Verschiedene Browser haben unterschiedliche
e.keyCode
für einige Schlüssel, besser zu verwendene.which
dies garantiert, dass Sie in jedem Browser dieselbe Schaltfläche verwenden– Oleg Schachow
1. Februar 2020 um 15:09 Uhr
Etienne Dupuis
$('#textbox').on('keypress', function (e) {
if(e.which === 13){
//Disable textbox to prevent multiple submit
$(this).attr("disabled", "disabled");
//Do Stuff, submit, etc..
//Enable the textbox again if needed.
$(this).removeAttr("disabled");
}
});
-
Danke – Diese Lösung passte zu meinem Anwendungsfall. Beachten Sie jedoch, dass Sie nach Abschluss der Verarbeitung möglicherweise ` $(this).removeAttr(“disabled”);` hinzufügen möchten, um das Textfeld wieder zu aktivieren.
– Misterjaytee
2. Februar 2016 um 1:19 Uhr
Hier ist ein Plugin für Sie: (Fiddle: http://jsfiddle.net/maniator/CjrJ7/)
$.fn.pressEnter = function(fn) {
return this.each(function() {
$(this).bind('enterPress', fn);
$(this).keyup(function(e){
if(e.keyCode == 13)
{
$(this).trigger("enterPress");
}
})
});
};
//use it:
$('textarea').pressEnter(function(){alert('here')})
-
Nett. Viel einfacher als die URL, die ich gepostet habe. Ich frage mich, worum es in dem von mir geposteten Artikel geht und warum so viel Code benötigt wird.
– CaptSaltyJack
29. Juni 2011 um 17:10 Uhr
-
Zu spät, ich habe schon selbst geschrieben :P. Es macht auch die gleiche Arbeit in weniger Zeilen.. auch mit der
$
Variable für das Plugin ist keine gute Idee, da dies zu Konflikten führen kann.– Ali
29. Juni 2011 um 17:30 Uhr
-
@Neal, weißt du, wie der Code des Plugins, das ich in der akzeptierten Antwort gepostet habe, geändert werden müsste, damit man das tun könnte
$("#myInput").bind('click, onEnter', myCallback);
und es würde funktionieren, ohne etwas anderes zu brauchen?– Ali
29. Juni 2011 um 17:53 Uhr
-
@ClickUpvote #1: Entfernen Sie es aus der Antwort – dann können wir reden.
– Naftali
29. Juni 2011 um 17:54 Uhr
-
@Neal Erstaunliche Lösung, Mann. Ich hatte gerade diese Funktion kopieren! Danke!
– Bilal Fazlani
24. März 2013 um 11:08 Uhr
jzilla
Hier ist ein jquery-Plugin, um das zu tun
(function($) {
$.fn.onEnter = function(func) {
this.bind('keypress', function(e) {
if (e.keyCode == 13) func.apply(this, [e]);
});
return this;
};
})(jQuery);
Um es zu verwenden, fügen Sie den Code hinzu und richten Sie ihn wie folgt ein:
$( function () {
console.log($("input"));
$("input").onEnter( function() {
$(this).val("Enter key pressed");
});
});
Josua Burns
Es sollte sein gut erkannt dass die Verwendung von live()
in jQuery wurde veraltet seit Version 1.7
und war ENTFERNT in jQuery 1.9
. Stattdessen die Verwendung von on()
ist empfohlen.
Ich würde die folgende Methodik für die Bindung dringend empfehlen, da sie die folgenden potenziellen Herausforderungen löst:
- Durch die Bindung des Ereignisses an
document.body
und Übergabe von $selector als zweites Argument anon()
, können Elemente an das DOM angehängt, davon gelöst, hinzugefügt oder daraus entfernt werden, ohne dass Ereignisse mit erneuter Bindung oder doppelter Bindung behandelt werden müssen. Dies liegt daran, dass das Ereignis angehängt istdocument.body
statt$selector
direkt, das heißt$selector
kann hinzugefügt, entfernt und wieder hinzugefügt werden und wird niemals das daran gebundene Ereignis laden. - Durch Anruf
off()
Voron()
kann dieses Skript entweder im Hauptteil der Seite oder im Hauptteil eines AJAX-Aufrufs enthalten sein, ohne dass Sie sich Gedanken über versehentliche Doppelbindungsereignisse machen müssen. - Indem Sie das Skript darin einschließen
$(function() {...})
kann dieses Skript wiederum entweder vom Hauptteil der Seite oder innerhalb des Hauptteils eines AJAX-Aufrufs geladen werden.$(document).ready()
wird nicht für AJAX-Anforderungen gefeuert, während$(function() {...})
tut.
Hier ist ein Beispiel:
<!DOCTYPE html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
var $selector = $('textarea');
// Prevent double-binding
// (only a potential issue if script is loaded through AJAX)
$(document.body).off('keyup', $selector);
// Bind to keyup events on the $selector.
$(document.body).on('keyup', $selector, function(event) {
if(event.keyCode == 13) { // 13 = Enter Key
alert('enter key pressed.');
}
});
});
</script>
</head>
<body>
</body>
</html>
Linh
Wenn Ihre Eingabe ist search
können Sie auch verwenden on 'search'
Veranstaltung. Beispiel
<input type="search" placeholder="Search" id="searchTextBox">
.
$("#searchPostTextBox").on('search', function () {
alert("search value: "+$(this).val());
});
Yogesh Lodha
HTML Quelltext:-
<input type="text" name="txt1" id="txt1" onkeypress="return AddKeyPress(event);" />
<input type="button" id="btnclick">
Java-Script-Code
function AddKeyPress(e) {
// look for window.event in case event isn't passed in
e = e || window.event;
if (e.keyCode == 13) {
document.getElementById('btnEmail').click();
return false;
}
return true;
}
Ihr Formular hat keine Standard-Senden-Schaltfläche