Подтвердить что ты не робот

Event.keycode не возвращает правильные значения в firefox

Я пытаюсь использовать следующий код для запуска js-метода, когда space-bar нажата в поле ввода.

  <input id="j1" /> 

  $('#j1').keypress (function (event){
       alert(event.keycode)
  });

В firefox это возвращает правильное значение только при нажатии enter, значения, возвращаемые для других ключей, просто 0 каждый раз. В IE/chrome это работает отлично.

4b9b3361

Ответ 1

В браузерах, отличных от IE, вы хотите использовать свойство which или charCode в событии keypress, а не в свойстве keyCode. Событие keypress предназначено для обнаружения типизированных символов, а keyup и keydown - для определения физических ключей (в этих событиях keyCode работает в каждом крупном браузере).

var charCode = (typeof event.which == "number") ? event.which : event.keyCode;

Однако jQuery нормализует свойство which событий нажатия клавиш, используя код, подобный этому, поэтому в jQuery вам просто нужно

var charCode = event.which;

Подробнее о ключевых событиях (много) см. http://unixpapa.com/js/key.html.

Ответ 2

Проблема заключается не в том, что у всех браузеров одинаковые реализации на нажатия клавиш. Решение состояло бы в том, чтобы проверить все возможные места, где был зарегистрирован key. В этом случае: event.keycode и event.which

Смотрите это сообщение для получения дополнительной информации

jQuery Event Keypress: какой ключ был нажат?

ИЗМЕНИТЬ

Наконец, выкопали мои старые функции, это фактический код, который я использую:

evt = (evt) ? evt : event;
var charCode = evt.which || evt.charCode || evt.keyCode || 0;

Ответ 3

IF "event.keyCode" не возвращает правильные значения, а затем для firefox вы можете использовать " event.charCode"

var keyValue = event.charCode || event.keyCode;

Ответ 4

KeyboardEvent.keyCode:

Значение события нажатия клавиши различается между браузерами. IE и Google Chrome установил значение KeyboardEvent.charCode. Гекко устанавливает 0, если нажатая клавиша - это клавиша для печати, в противном случае она устанавливает тот же ключевой код как событие keydown или keyup

Итак, с точки зрения Firefox, он действительно вернул правильные значения. См. документы.

keyCode, which, keyIdentifier и charCode устарели

Эта функция удалена из веб-стандартов. Хотя некоторые браузеры все еще могут его поддерживать, он находится в процессе отброшен. Избегайте его использования и, если возможно, обновите существующий код;

keyIdentifier не поддерживал IE и Firefox и был удален из Opera и Chrome. С charCode как нестандартным

Эта функция нестандартная и не соответствует треку стандартов. Не используйте его на производственных площадках, обращенных к Интернету: он не будет работать для каждого пользователя. Также могут быть большие несовместимости между реализациями

Итак, каковы альтернативы?

I. Вместо этого используйте свойство key

readonly attribute DOMString key

Удерживает значение атрибута ключа, соответствующее нажатой клавише

Примеры: "a", "A", "@", "%", "$", "ا", "ب", "ة", "ت",..., "1", "2", "3", "Tab", "Enter", все "F1"...`

Он заработал поддержку всех основных браузеров (Firefox 52, Chrome 55, Safari 10.1, Opera 46), за исключением Internet Explorer 11, который нестандартные ключевые идентификаторы и неправильное поведение с помощью AltGraph. Дополнительная информация
               Если это важно и/или обратная совместимость, то вы можете использовать обнаружение функции, как в следующем коде:

Обратите внимание, что значение key отличается от свойств keyCode или which тем, что: оно содержит имя ключа, а не его код. Если вашей программе нужны коды символов, вы можете использовать charCodeAt(). Для одиночных печатных символов вы можете использовать charCodeAt(), если вы имеете дело с ключами, значения которых содержат несколько символов, например ArrowUp есть вероятность: вы тестируете специальные клавиши и выполняете соответствующие действия. Поэтому попробуйте реализовать таблицу значений ключей и их соответствующие           коды charCodeArr["ArrowUp"]=38, charCodeArr["Enter"]=13, charCodeArr[Escape]=27... и т.д., пожалуйста, взгляните на Key Values ​​ и их соответствующие коды

if(e.key!=undefined){
        var characterCode = charCodeArr[e.key] || e.key.charCodeAt(0);
    }else{
        /* As @Leonid suggeted   */
        var characterCode = e.which || e.charCode || e.keyCode || 0;
    }
        /* ... code making use of characterCode variable  */  

II. Вы также можете использовать свойство code:

readonly attribute DOMString code

Удерживает строку, которая идентифицирует нажатие физического ключа. значение не влияет на текущую раскладку клавиатуры или модификатор, поэтому конкретный ключ всегда будет возвращать одно и то же значение.

Он имеет сходный эффект с свойством key и выходом вроде "keyW" для кнопки W, нажатой на клавиатуре США с QUERTY раскладка. Если та же кнопка была нажата в другом макете (AZERTY) или другом языке (иврит) или в сочетании с модификатором (сдвиг), свойство key изменится соответствующим образом, а свойство code будет по-прежнему иметь такое же значение "keyW" подробнее об этом здесь.

Свойство code поддерживается в Chrome 49, Firefox 52, Safari 10.1 и Opera 46 Но не в Internet Explorer.

см. также:

Ответ 5

если вы получаете 0 независимо от того, какую клавишу вы нажимаете, попробуйте использовать charCode вместо keyCode

Это происходит потому, что вы вызываете объект KeyboardEvent, который использует which и charCode а не объект Event, который использует keyCode для возврата значений Unicode клавиатуры. Для получения дополнительной информации обратитесь к веб-документам MDN для получения дополнительной информации о KeyboardEvent: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent