Вот что у меня сейчас:
$("input").bind("keydown",function(e){
var value = this.value + String.fromCharCode(e.keyCode);
}
Если e.keyCode
не может быть ASCII символов ( Alt, backspace, del, arrows., И т.д.) ... Я бы сейчас нужен trim
эти значения от value
каких - то образом (предпочтительно программно - не с таблицами поиска).
Я использую JQuery.
Я должен использовать keydown
событие. keyPress
не включается для определенного клавиша мне нужен захват ( Esc, del, backspaceи т.д.).
Я не могу использовать, setTimeout
чтобы получить значение ввода. setTimeout(function(){},0)
слишком медленно
javascript
jquery
special-characters
keycode
Дэвид Мердок
источник
источник
keydown
для захвата кодов символов? Вас ждет адская поездка: quirksmode.org/js/keys.html (подсказка: используйтеkeypress
!! )document.onkeydown = function(e){ console.log('Key: ' + e.key); }
Ответы:
Может быть, я не правильно понял вопрос, но вы не можете использовать,
keyup
если вы хотите захватить оба входа?источник
По моему опыту
String.fromCharCode(e.keyCode)
это ненадежно.String.fromCharCode
ожидает, что в качестве аргумента используются юникодные коды;e.keyCode
возвращает коды клавиш JavaScript. Javascript keycode и unicode charcodes - это не одно и то же! В частности, клавиши цифровой клавиатуры возвращают отличныеkeycode
от обычных цифровых клавиш (поскольку они являются разными клавишами), в то время как одни и те же клавишиkeycode
возвращаются для буквupper
иlowercase
букв (в обоих случаях вы нажимали одну и ту же клавишу), несмотря на то, что они различаютсяcharcodes
.Например, обычная
keycode
цифровая клавиша 1 генерирует событие с 49, а цифровая клавиша 1 (с включенным Numlock) генерируетkeycode
97. При использовании сString.fromCharCode
мы получаем следующее:String.fromCharCode
ожидает кодировки Unicode, а не коды JavaScript. Клавиша aгенерирует событие сkeycode
65, независимо от регистра символа, который она сгенерирует (также имеется модификатор для Shiftнажатия клавиши и т. Д. В событии). У персонажа aесть юникодcharcode
из 61 в то время как персонаж Aимеетcharcode
из 41 (согласно, например, http://www.utf8-chartable.de/ ). Тем не менее, этоhex
значения, преобразование в десятичную дает намcharcode
65 для «А» и 97 для «а». [1] Это согласуется с тем, что мы получаемString.fromCharCode
для этих значений.Мое собственное требование было ограничено обработкой чисел и обычных букв (принятие или отклонение в зависимости от позиции в строке) и Fпропуском управляющих символов ( -keys, -something Ctrl). Таким образом, я могу проверить контрольные символы, если это не контрольный символ, который я проверяю по диапазону, и только тогда мне нужно получить фактический символ. Учитывая, что я не беспокоюсь о регистре (я в любом случае меняю все буквы на верхний регистр) и уже ограничил диапазон кодов клавиш, мне остается только беспокоиться о клавишах цифровой клавиатуры. Для этого достаточно:
В целом, функция для надежного возврата символа из a
charcode
была бы полезной (возможно, как плагин jQuery), но у меня нет времени, чтобы написать ее сейчас. Сожалею.Я бы также упомянул
e.which
(если вы используете jQuery), который нормализуетe.keyCode
иe.charCode
, так что вам не нужно беспокоиться о том, какая клавиша была нажата. Проблема с его объединениемString.fromCharCode
остается.[1] Я был сбит с толку некоторое время -. во всех документах говорится, что
String.fromCharCode
ожидается Unicodecharcode
, хотя на практике он работал для кодов ASCII, но это было, я думаю, из-за необходимости преобразования в десятичную систему из шестнадцатеричного кода в сочетании с тем фактом, что ASCII-коды и десятичные кодировки Unicode перекрываются для обычных латинские буквы.источник
keyCode
том, чтобы знать, какая клавиша была нажата, а не в том, какой символ использовать. Например, «U» на клавиатуре «Дворжак» имеет тот же код клавиши, что и «F» на клавиатуре QWERTY или «ㄹ» на корейской клавиатуре и т. Д. Дело не в том, чтобы преобразовать его в символ, оно есть, чтобы вы могли легко сопоставить вещи с позиции клавиатуры.Читаемые имена ключей, проиндексированные кодом ключа
Ключевых кодов относительно немного, поэтому я просто перечислил все соответствующие значения в статическом массиве, чтобы я мог просто преобразовать число
65
вA
использованиеkeyboardMap[65]
Не все коды клавиш отображаются на печатный символ, поэтому возвращается какая-то другая идентифицируемая строка.
Возможно, вам придется изменить массив в соответствии с вашими потребностями и просто вернуть пустые строки для всех символов, которые вы не хотите переводить. Следующий массив позволяет мне быстро и надежно определить, какая клавиша была нажата в любой среде. Наслаждайтесь!
Попробуйте следующий фрагмент кода, используя этот подход поиска статического массива ...
Показать фрагмент кода
Коды ключей стоит отметить
Письма AZ: (65-90)
Цифры 0-9: (48-57)
Цифровая клавиатура 0-9: (96-105)
Клавиши со стрелками: (37-40)
Клавиша Tab: (9)
Введите ключ: (13)
Клавиша пробела: (32)
Специфичный для ОС ключ (91) Windows Key (Windows) или Command Key (Mac)
Alt Key: (18)
Ключ управления: (17)
Клавиша Shift: (16)
Ключ замка Caps: (20)
источник
Просто важное примечание: принятый ответ выше не будет работать правильно для keyCode> = 144, то есть точка, запятая, тире и т. Д. Для них следует использовать более общий алгоритм:
Если вам интересно, почему, это очевидно необходимо из-за поведения встроенной функции JS
String.fromCharCode()
. Для значенийkeyCode <= 96
это, кажется, отображается с помощью функции:chrCode = keyCode - 48 * Math.floor(keyCode / 48)
Для значений
keyCode > 96
это, кажется, отображается с помощью функции:chrCode = keyCode
Если это кажется странным поведением, тогда я согласен. К сожалению, это было бы очень далеко от самого странного, что я видел в ядре JS.
источник
let
в ответе на вопрос 2009 года. :-)let
то я сделаю им одолжение ;-)Я предполагаю, что это для игры или для быстродействующего типа приложения, поэтому использование KEYDOWN, а не KEYPRESS.
Редактировать : Черт! Я исправлен (спасибо Crescent Fresh и David): JQuery (или, скорее, базовые хосты DOM) не раскрывают детали WM_KEYDOWN и других событий. Скорее они предварительно переваривают эти данные и, в случае keyDown даже в JQuery, мы получаем:
Обратите внимание, что эти свойства являются значениями UniCode.
Обратите внимание, я не смог найти авторитетную ссылку на это в документах JQuery, но многие авторитетные примеры в сети ссылаются на эти два свойства.
Следующий код, адаптированный из некоторого моего java (не javascript), поэтому совершенно неверен ...
Следующее даст вам «интересные» части кода ключа:
источник
keydown
или нет).Я знаю, что это старый вопрос, но я наткнулся на него сегодня в поисках готового решения этой проблемы и не нашел ничего, что действительно отвечало бы моим потребностям.
Вот решение (только на английском языке), которое правильно поддерживает прописные буквы (сдвинутые), строчные буквы, знаки препинания, цифровую клавиатуру и т. Д.
Он также позволяет легко и просто идентифицировать и реагировать на непечатаемые клавиши, такие как ESC, стрелки, функциональные клавиши и т. Д.
https://jsfiddle.net/5hhu896g/1/
Спасибо DaveAlger за то, что он сэкономил мне немного печати и много открытий! - предоставив массив именованных ключей.
источник
Недавно я написал модуль под названием keysight , который транслирует
keypress
,keydown
иkeyup
события в символы и ключи соответственно.Пример:
источник
Для тех из вас, кто пришел сюда в поисках фактических значений символов Unicode для кода клавиши, как я сделал, вот функция для этого. Например, если код клавиши Unicode направлен на стрелку вправо, это выведет видимую строку
\u001B\u005B\u0043
источник
Вы также можете использовать свойство только для чтения
key
. Это также уважает специальные ключи, такие какshift и т. Д. И поддерживается IE9.Когда нажимается непечатаемый или специальный символ, значение будет одним из определенных значений клавиш, таких как
'Shift'
или'Multiply'
.event.key
'x'
'X'
'F5'
источник
Перейдите по этой ссылке Получить код клавиши от нажатия клавиши и значение символа для любого кода клавиши
источник