kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
 devios1
devios1
Вопрос

Определить, является ли JavaScript e.keyCode печатаемым (неконтролируемым) символом

Я хотел бы узнать диапазон (диапазоны) JavaScript keyCode, которые соответствуют вводимым символам; или, альтернативно, диапазон непечатаемых (управляющих) символов, таких как backspace, escape, command, shift и т.д., чтобы я мог их игнорировать.

Причина, по которой я спрашиваю, - вызов String.fromCharCode() приводит к странным символам для управляющих клавиш. Например, я получаю "[" для левой команды, "%" для стрелки влево. Вот такие странности.

52 2012-09-17T21:17:41+00:00 5
 devios1
devios1
Редактировал вопрос 17-го сентября 2012 в 9:41
Программирование
javascript
keycode
Решение / Ответ
 Shmiddty
Shmiddty
17-го сентября 2012 в 9:50
2012-09-17T21:50:45+00:00
Дополнительно
Источник
Редактировать
#17230890

Keydown выдаст вам KeyCode нажатой клавиши без каких-либо модификаций.

$("#keypresser").keydown(function(e){
    var keycode = e.keyCode;

    var valid = 
        (keycode > 47 && keycode < 58)   || // number keys
        keycode == 32 || keycode == 13   || // spacebar & return key(s) (if you want to allow carriage returns)
        (keycode > 64 && keycode < 91)   || // letter keys
        (keycode > 95 && keycode < 112)  || // numpad keys
        (keycode > 185 && keycode < 193) || // ;=,-./` (in order)
        (keycode > 218 && keycode < 223);   // [\]' (in order)

    return valid;
});

Только цифровые, буквенные клавиши и пробел будут иметь коды клавиш, соответствующие String.fromCharCode, поскольку он использует значения Unicode.

Нажатие клавиш будет представлением введенного текста в кодировке charCode. Обратите внимание, что это событие не произойдет, если текст не будет "напечатан" в результате нажатия клавиши.

$("#keypresser").keypress(function(e){
    var charcode = e.charCode;
    var char = String.fromCharCode(charcode);
    console.log(char);
});

Продемонстрируем, как они работают.

KeyUp ведет себя аналогично KeyDown.

 Shmiddty
Shmiddty
Редактировал ответ 17-го сентября 2012 в 10:05
83
0
 iamio
iamio
2-го апреля 2018 в 1:39
2018-04-02T13:39:40+00:00
Дополнительно
Источник
Редактировать
#17230892

Для справки: событие "keypress" будет передавать вам свойство charCode всякий раз, когда вы нажимаете символьную клавишу.

Editor.addEventListener('keypress', function(event){
    if (event.charCode) {
        //// character key
        console.log( String.fromCharCode(event.charCode) ); /// convert charCode to intended character.
    } else {
        //// control key
    }

Однако событие "keypress" не фиксирует каждое нажатие клавиши - несколько клавиш срабатывают до события "keypress".

Напротив, событие "keydown" фиксирует каждое нажатие клавиши, но у него нет свойства charCode. Как же мы можем определить, что это символьная клавиша? Проверять при каждом нажатии клавиши, находится ли keyCode в пределах нижней и верхней границы для нескольких диапазонов, не является оптимально эффективным. Я подозреваю, что есть проблемы и для символов за пределами диапазона ASCII.

Мой подход заключается в проверке длины свойства события "ключ". Свойство "key" является альтернативой "keyCode" для определения того, какая клавиша была нажата. Для контрольных клавиш свойство "key" является описательным (например, "правая стрелка", "F12", "return" и т.д.). Для символьных клавиш свойство "ключ" для символьной клавиши - это просто символ (например, "a", "A", "~", "\\" и т.д.). Поэтому для каждого символа-ключа длина свойства "ключ" будет равна 1; в то время как управляющие символы будут иметь длину больше 1.

Editor.addEventListener('keydown', function(event){
    if (event.key.length == 1){ 
        //// character key
    } else {
        //// control key
    }
})
15
0
Dave Zych
Dave Zych
17-го сентября 2012 в 9:21
2012-09-17T21:21:11+00:00
Дополнительно
Источник
Редактировать
#17230889

В этой статье приведен список ключевых кодов в Javascript:

http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes

4
0
 denkquer
denkquer
7-го августа 2019 в 11:34
2019-08-07T23:34:24+00:00
Дополнительно
Источник
Редактировать
#17230893

Вы также можете использовать регулярное выражение для этого:

$(".input").keyup(function (event) {
    if (event.key.match(/^[\d\w]$/i)) {
      // put function to trigger when a digit or a word character is pressed here
    }

"я" флаг делает выражения без учета регистра.

1
0
 Teu
Teu
1-го ноября 2019 в 11:59
2019-11-01T11:59:22+00:00
Дополнительно
Источник
Редактировать
#17230894

Я заметил, что все персонажи с длиной 1 ('Это','б',число,символ) версия для печати поэтому я использую только. Я использую это решение для не-английских символов тоже:

if(e.key.length==1)
    print();
Nico Griffioen
Nico Griffioen
Редактировал ответ 1-го ноября 2019 в 12:01
0
0
Похожие сообщества 12
JavaScript Jobs — чат
JavaScript Jobs — чат
26 291 пользователей
JavaScript Jobs — чат для поиска работы и людей Правила оформления: @telegram-ru/r1WQe5F1m" rel="nofollow noopener noreferrer" class="text-blue hover:text-black link" target="_blank">https://teletype.in/@telegram-ru/r1WQe5F1m См. также: @mobile_jobs, @devops_jobs, @nodejs_jobs, @react_js, @angular_ru, @js_ru
Открыть telegram
JavaScript Noobs — сообщество новичков
JavaScript Noobs — сообщество новичков
9 470 пользователей
Помогаем друг другу разбираться с JS Правила: @js_noobs_ru/rules" rel="nofollow noopener noreferrer" class="text-blue hover:text-black link" target="_blank">https://teletype.in/@js_noobs_ru/rules Другие полезные чаты — https://github.com/goq/telegram-list или https://rudevs.network/ByKT2JwWQ
Открыть telegram
JavaScript — русскоговорящее сообщество
JavaScript — русскоговорящее сообщество
7 714 пользователей
Рекомендуем сразу отключить уведомления Правила: https://git.io/JycBd См. также: @js_noobs_ru, @nodejs_ru, @ts_cool, @react_js, @electron_cool Вакансии и поиск работы: @javascript_jobs
Открыть telegram
JavaScript.Ninja
JavaScript.Ninja
3 810 пользователей
Правила поведения проекта https://telegra.ph/Kodeks-povedeniya-proekta-JavaScriptNinja-12-15
Открыть telegram
pro.js
pro.js
3 721 пользователей
Сообщество веб (и javascript) разработчиков Чат для начинающих: @js_lib ⚠️ Вакансии - раз в неделю с вилкой зп ⚠️ Оффтоп -> @flood ❌Переход на личности ❌Троллинг ❌Реклама ❌Варез По всем вопросам: @igorz Зам: @slavik4
Открыть telegram
javascript_ru
javascript_ru
2 726 пользователей
Сообщество любителей самого популярного языка программирования в мире. Публикация вакансий: @javascript_jobs Чаты: @frontend_ru @css_ru Каналы: @defront @frontendnoteschannel Флуд: @javascript_ru_flood Важно! http://nometa.xyz и http://neprivet.ru
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Ilya Smirnov
Зарегистрирован 6 дней назад
2
Денис Васьков
Зарегистрирован 1 неделю назад
3
Dima Patrushev
Зарегистрирован 1 неделю назад
4
sirojidddin otaboyev
Зарегистрирован 2 недели назад
5
Елена Гайдамамакинат
Зарегистрирован 2 недели назад
ID
KO
RU
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией