Как узнать, если.keyup () - это символьный ключ (jQuery)
Как узнать, если .keyup () - это символьный ключ (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 */
}
});
6 ответов:
Примечание: в ретроспективе это был быстрый и грязный ответ, и может не работать во всех ситуациях. Чтобы иметь надежное решение, см. ответ Тима Дауна (скопируйте вставку, что здесь, поскольку этот ответ все еще получает представления и upvotes):
вы не можете сделать это надежно событие keyup. Если вы хотите знать что-то о символе, который был набран, вы должны использовать вместо этого событие нажатия клавиши.
следующий пример будет работать все время в большинстве браузеров, но есть некоторые крайние случаи, о которых вы должны знать. За то, что находится внутри мой взгляд полное руководство по этому вопросу см. 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иkeydownдать вам информацию о физическом ключа был нажат. На стандартных клавиатурах США / Великобритании в их стандартных раскладках, это похоже, существует корреляция междуkeyCodeсобственность эти события и характер они представлять собой. Однако это не так надежность: разные раскладки клавиатуры будут иметь разные сопоставления.
следующим был оригинальный ответ, но не правильный и не может надежно работать во всех ситуациях.
чтобы сопоставить код ключа с символом слова (например.,aбудет соответствовать.spaceне будет)$("input").keyup(function(event) { var c= String.fromCharCode(event.keyCode); var isWordcharacter = c.match(/\w/); });ок, это был быстрый ответ. Подход тот же, но остерегайтесь проблем с кодом ключа, смотрите это статьи в quirksmode.
вы не можете сделать это надежно с
keyupсобытие. если вы хотите узнать что-то о символе, который был введен, вы должны использовать событие.следующий пример будет работать все время в большинстве браузеров, но есть некоторые крайние случаи, о которых вы должны знать. Что, на мой взгляд, является окончательным руководством по этому вопросу, см. 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иkeydownдаст вам информация о физической клавише, которая была нажата. На стандартных клавиатурах США / Великобритании в их стандартных макетах, похоже, существует корреляция междуkeyCodeсвойство этих событий и персонажей, которых они представляют. Однако это ненадежно: разные раскладки клавиатуры будут иметь разные сопоставления.
это помогло мне:
$("#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) { ...
Я не полностью удовлетворен другими данными ответами. У них у всех есть какой-то недостаток.
используя
keyPressСevent.whichненадежно, потому что вы не можете поймать backspace или delete (как упоминалось Tarl). ИспользуяkeyDown(как в ответах Нивы и Тарла) немного лучше, но решение испорчено, потому что оно пытается использоватьevent.keyCodeСString.fromCharCode()(keyCode и charCode-это не одно и то же!).однако, что мы имеем с
keydownилиkeyupсобытие-это фактическая клавиша, которая была нажата (event.key). Насколько я могу судить, любойkeyдлиной 1 символ (цифра или буква) независимо от того, какой язык вы используете. Пожалуйста, поправьте меня, если это не так!тогда есть очень длинный ответ от asdf. Это может работать отлично, но это кажется излишним.
Итак, вот простое решение, которое будет ловить все символы, backspace и delete. (Примечание: либо
keyupилиkeydownбудет работать здесь, ноkeypressне будет)$("input").keydown(function(e) { var isWordCharacter = event.key.length === 1; var isBackspaceOrDelete = (event.keyCode == 8 || event.keyCode == 46); if (isWordCharacter || isBackspaceOrDelete) { } });
Если вам нужно только исключить
enter,escapeиspacebarключи, вы можете сделать следующее:$("#text1").keyup(function(event) { if (event.keyCode != '13' && event.keyCode != '27' && event.keyCode != '32') { alert('test'); } });вы можете обратиться к полный список вот код для дальнейшей модификации.
Я хотел сделать именно это, и я думал о решении с участием и the keyup и нажатие событий.
(Я не проверял его во всех браузерах, но я использовал информацию, собранную в http://unixpapa.com/js/key.html)
Edit: переписал его как плагин jQuery.
(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);