‹элемент›.KeyCode не работает на некоторых клавиатурах?

Я обнаруживаю нажатую клавишу (в данном случае <tab>) внутри поля ввода текста. Все в порядке, пока я кодирую. Но когда я тестирую на другом компьютере (ноутбук с той же версией Firefox), он возвращает «Не определено». Почему?

Например: Когда я нажал клавишу <tab>, она должна вернуть 9. Вместо этого он возвращает Undefined или 0 на некоторых других машинах. Почему?

Используя следующий код JS:

function keyHandler(e) {
  var charCode;
  if (e && e.which) {
      charCode = e.which;
  } else if (window.event) {
      e = window.event;
      charCode = e.keyCode;
  }

  if (charCode == 9) {
    bla.. bla.. bla.. bla.. 
  }
}

Что меня удивляет, так это то, что это работает на моем pc, но не на другом laptop. Клавиатуры ноутбуков имеют разные коды клавиш?

или почему?


person 夏期劇場    schedule 16.10.2011    source источник


Ответы (1)


пытаться:

function keyHandler() {
var e = arguments[0] || window.event,
    charCode = e.which || e.keyCode || e.charCode;

  if (charCode == 9) {
    bla.. bla.. bla.. bla.. 
  }
  else {
  console.log( charCode );
  }
}

или просто используйте jQuery

person Esailija    schedule 16.10.2011
comment
Должно быть function keyHandler(e) .. правильно? Также это не работает в IE :( - person 夏期劇場; 16.10.2011
comment
Нет, переменная e определяется внутри функции и назначается первому аргументу (arguments[0]) (или, в случае IE, window.event, потому что arguments[0] будет undefined). Какую версию IE вы имеете в виду? - person Esailija; 16.10.2011
comment
присваивается первому аргументу (arguments[0]) ?? Итак, пожалуйста, как будет вызываться функция со стороны элемента? Я имею в виду, не будет ли это onkeypress="keyHandler(event);" ??? - person 夏期劇場; 16.10.2011
comment
document.onkeyup = keyHandler; или если вы хотите, чтобы он работал только тогда, когда элемент находится в фокусе, дайте элементу идентификатор и выполните document.getElementById("elementid").onkeyup = keyHandler Примечание: нажатие клавиши, а не нажатие клавиши. Обратите внимание, что это было бы намного проще с jQuery, так как вам не нужно думать о различиях браузеров в простых задачах. - person Esailija; 16.10.2011
comment
document.getElementById("elementid").onkeyup = keyHandler; и ввод текста с помощью <input id="elementid" type="text" /> не работает даже в Firefox :( - person 夏期劇場; 16.10.2011
comment
элемент ввода должен быть отрисован, прежде чем вы сможете вызвать document.getElementById. поместите тег <script> непосредственно перед закрытием тега </body> и поместите туда код - person Esailija; 16.10.2011