Wie Sie feststellen können, ob .keyup () ein Zeichenschlüssel ist (jQuery)
$("input").keyup(function() {
if (key is a character) { //such as a b A b c 5 3 2 $ # ^ ! ^ * # ...etc not enter key or shift or Esc or space ...etc
/* Do stuff */
}
});
Hinweis: Im Nachhinein war dies eine schnelle und schmutzige Antwort und funktioniert möglicherweise nicht in allen Situationen. Eine zuverlässige Lösung finden Sie unter Tim Downs Antwort (Kopieren Sie hier, dass diese Antwort immer noch Ansichten und Upvotes enthält):
Mit dem Ereignis keyup können Sie dies nicht zuverlässig tun. Wenn du wissen willst Wenn Sie etwas über das eingegebene Zeichen schreiben, müssen Sie die .__ verwenden. stattdessen ein Tastendruckereignis.
Das folgende Beispiel funktioniert in den meisten Browsern immer, außer Es gibt einige Edge-Fälle, die Sie kennen sollten. Für was ist in Meiner Ansicht nach die endgültige Anleitung dazu http://unixpapa.com/js/key.html .
$("input").keypress(function(e) { if (e.which !== 0) { alert("Charcter was typed. It was: " + String.fromCharCode(e.which)); } });
keyup
undkeydown
geben Ihnen Informationen über den physischen Schlüssel, den wurde gedrückt. Auf Standard-US/UK-Tastaturen in ihren Standardlayouts ist es Es sieht so aus, als ob zwischen derkeyCode
-Eigenschaft von .__ eine Korrelation besteht. diese Ereignisse und den Charakter, den sie repräsentieren. Dies ist jedoch nicht zuverlässig: Unterschiedliche Tastaturlayouts haben unterschiedliche Zuordnungen.
Das Folgende war die ursprüngliche Antwort, ist jedoch nicht korrekt und funktioniert möglicherweise nicht in allen Situationen zuverlässig.
Um den Schlüsselcode mit einem Word-Zeichen abzugleichen (z. B. würde a
passen. space
würde nicht)
$("input").keyup(function(event)
{
var c= String.fromCharCode(event.keyCode);
var isWordcharacter = c.match(/\w/);
});
Ok, das war eine schnelle Antwort. Der Ansatz ist derselbe, aber hüten Sie sich vor Schlüsselcode-Problemen. Siehe article im quirksmode . </ Strike>
Mit dem Ereignis keyup
können Sie dies nicht zuverlässig tun. Wenn Sie etwas über das eingegebene Zeichen wissen möchten, müssen Sie stattdessen das Ereignis keypress
verwenden.
Das folgende Beispiel funktioniert in den meisten Browsern ständig, es gibt jedoch einige Edge-Fälle, die Sie kennen sollten. Was meiner Meinung nach die endgültige Anleitung dazu ist, finden Sie unter http://unixpapa.com/js/key.html .
$("input").keypress(function(e) {
if (e.which !== 0) {
alert("Charcter was typed. It was: " + String.fromCharCode(e.which));
}
});
keyup
und keydown
geben Ihnen Informationen über den gedrückten physischen Schlüssel. Auf Standard-US/UK-Tastaturen in ihren Standardlayouts scheint es eine Korrelation zwischen der keyCode
-Eigenschaft dieser Ereignisse und dem von ihnen repräsentierten Charakter zu geben. Dies ist jedoch nicht zuverlässig: Unterschiedliche Tastaturlayouts weisen unterschiedliche Zuordnungen auf.
Das hat mir geholfen:
$("#input").keyup(function(event) {
//use keyup instead keypress because:
//- keypress will not work on backspace and delete
//- keypress is called before the character is added to the textfield (at least in google chrome)
var searchText = $.trim($("#input").val());
var c= String.fromCharCode(event.keyCode);
var isWordCharacter = c.match(/\w/);
var isBackspaceOrDelete = (event.keyCode == 8 || event.keyCode == 46);
// trigger only on Word characters, backspace or delete and an entry size of at least 3 characters
if((isWordCharacter || isBackspaceOrDelete) && searchText.length > 2)
{ ...
Mit den anderen Antworten bin ich nicht ganz zufrieden. Sie haben alle einen Fehler.
Die Verwendung von keyPress
mit event.which
ist unzuverlässig, da Sie keine Rücktaste oder Löschvorgänge abfangen können (wie von Tarl erwähnt) Die Verwendung von keyDown
(wie in den Antworten von Niva und Tarl) ist etwas besser event.keyCode
mit String.fromCharCode()
verwenden (keyCode und charCode sind nicht gleich!).
Was wir jedoch mit dem Ereignis keydown
oder keyup
haben, ist die tatsächlich gedrückte Taste (event.key
) . Soweit ich das beurteilen kann, ist jede key
mit einer Länge von 1 ein Zeichen (Nummer oder Buchstabe), unabhängig von welche Sprachtastatur Sie verwenden. Bitte korrigieren Sie mich, wenn das nicht stimmt!
Dann gibt es diese sehr lange Antwort von asdf. Das funktioniert zwar perfekt, scheint aber übertrieben zu sein.
Hier ist eine einfache Lösung, die alle Zeichen, die Rücktaste und das Löschen einfängt. (Hinweis: Entweder keyup
oder keydown
funktionieren hier, aber keypress
nicht.)
$("input").keydown(function(e) {
var isWordCharacter = event.key.length === 1;
var isBackspaceOrDelete = (event.keyCode === 8 || event.keyCode === 46);
if (isWordCharacter || isBackspaceOrDelete) {
}
});
Wenn Sie lediglich die Schlüssel enter
, escape
und spacebar
ausschließen müssen, können Sie Folgendes tun:
$("#text1").keyup(function(event) {
if (event.keyCode != '13' && event.keyCode != '27' && event.keyCode != '32') {
alert('test');
}
});
Die vollständige Liste der Schlüsselcodes finden Sie hier zur weiteren Änderung.
Ich wollte genau das tun und dachte an eine Lösung, die beide die keyup - und die keypress -Ereignisse beinhaltet.
(Ich habe es nicht in allen Browsern getestet, aber ich habe die Informationen unter http://unixpapa.com/js/key.html verwendet).
Bearbeiten: Schreibe es als jQuery-Plugin um.}
(function($) {
$.fn.normalkeypress = function(onNormal, onSpecial) {
this.bind('keydown keypress keyup', (function() {
var keyDown = {}, // keep track of which buttons have been pressed
lastKeyDown;
return function(event) {
if (event.type == 'keydown') {
keyDown[lastKeyDown = event.keyCode] = false;
return;
}
if (event.type == 'keypress') {
keyDown[lastKeyDown] = event; // this keydown also triggered a keypress
return;
}
// 'keyup' event
var keyPress = keyDown[event.keyCode];
if ( keyPress &&
( ( ( keyPress.which >= 32 // not a control character
//|| keyPress.which == 8 || // \b
//|| keyPress.which == 9 || // \t
//|| keyPress.which == 10 || // \n
//|| keyPress.which == 13 // \r
) &&
!( keyPress.which >= 63232 && keyPress.which <= 63247 ) && // not special character in WebKit < 525
!( keyPress.which == 63273 ) && //
!( keyPress.which >= 63275 && keyPress.which <= 63277 ) && //
!( keyPress.which === event.keyCode && // not End / Home / Insert / Delete (i.e. in Opera < 10.50)
( keyPress.which == 35 || // End
keyPress.which == 36 || // Home
keyPress.which == 45 || // Insert
keyPress.which == 46 || // Delete
keyPress.which == 144 // Num Lock
)
)
) ||
keyPress.which === undefined // normal character in IE < 9.0
) &&
keyPress.charCode !== 0 // not special character in Konqueror 4.3
) {
// Normal character
if (onNormal) onNormal.call(this, keyPress, event);
} else {
// Special character
if (onSpecial) onSpecial.call(this, event);
}
delete keyDown[event.keyCode];
};
})());
};
})(jQuery);
Die Validierung des Schlüsselcodes hat mir nie gefallen. Mein Ansatz bestand darin zu sehen, ob die Eingabe Text (irgendein Zeichen) hat, um zu bestätigen, dass der Benutzer Text und keine anderen Zeichen eingibt
$('#input').on('keyup', function() {
var words = $(this).val();
// if input is empty, remove the Word count data and return
if(!words.length) {
$(this).removeData('wcount');
return true;
}
// if Word count data equals the count of the input, return
if(typeof $(this).data('wcount') !== "undefined" && ($(this).data('wcount') == words.length)){
return true;
}
// update or initialize the Word count data
$(this).data('wcount', words.length);
console.log('user tiped ' + words);
// do you stuff...
});
<html lang="en">
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<input type="text" name="input" id="input">
</body>
</html>