Как получить ключ нажатым и положить в массив в JavaScript? - PullRequest
2 голосов
/ 10 сентября 2010

Как получить нажатую клавишу и вместо возврата кода клавиши поместить эту клавишу в массив?

Например, пользователь нажмет «а». Затем код поместит «a», а не код ключа для символа, в массив.

Заранее спасибо!

Ответы [ 5 ]

7 голосов
/ 10 сентября 2010

Как насчет этого?

var your_array = [];

document.onkeydown = function (e) {
  var keyPress;

  if (typeof event !== 'undefined') {
    keyPress = event.keyCode;
  }
  else if (e) {
    keyPress = e.which;
  }

  your_array.push(String.fromCharCode(keyPress));

  return false;   // Prevents the default action
};

ОБНОВЛЕНИЕ: Если вам требуется точная информация о символах (например, различие прописных и строчных букв и т. Д.), Обязательно ознакомьтесь с комментариями @ Тим Дауна ниже и его другой ответ .

3 голосов
/ 10 сентября 2010

Для этого вам нужно событие keypress. keydown и keyup не могут быть надежно использованы для получения информации о персонаже. Отличное и подробное объяснение ключевых событий JavaScript на http://unixpapa.com/js/key.html

var charsTyped = [];

document.onkeypress = function(evt) {
    evt = evt || window.event;

    // Ensure we only handle printable keys
    var charCode = typeof evt.which == "number" ? evt.which : evt.keyCode;

    if (charCode) {
        charsTyped.push(String.fromCharCode(charCode));
    }
};
2 голосов
/ 10 сентября 2010

Ответ Даниэля идеален, но если вы хотите получить фактический символ (не числовой код), вы можете использовать эту функцию:

String.fromCharCode(code);

См. MDN для получения дополнительной информации..

0 голосов
/ 09 апреля 2016

Я написал библиотеку под названием keysight для перевода событий клавиатуры в клавиши и символы.

var yourKeyArray = []
node.addEventListener("keydown", function(event) {
    var key = keysight(event).key      // ignores shift keys, so 'A' is given as 'a'
    // var char = keysight(event).char // only characters, and differentiates between 'A' and 'a'

    yourKeyArray.push(key)
})
0 голосов
/ 10 сентября 2010

В вашем обработчике событий (если e является объектом события):

myarray.push(String.fromCharCode(e.charCode));

Обратите внимание, как fromCharCode возвращает символ с заданным кодом Unicode. Также обратите внимание, как я использовал charCode вместо keyCode, так как более правильно возвращать код символа, который иногда отличается от кода ключа (вам нужен символ).

...