KeyboardEvent.which
никогда не была реализована в Internet Explorer и считается устаревшим в других.
MDN объясняет how to most correctly handle keyboard events:
window.addEventListener("keydown", function (event) {
if (event.defaultPrevented) {
return; // Should do nothing if the default action has been cancelled
}
var handled = false;
if (event.key !== undefined) {
// Handle the event with KeyboardEvent.key and set handled true.
} else if (event.keyIdentifier !== undefined) {
// Handle the event with KeyboardEvent.keyIdentifier and set handled true.
} else if (event.keyCode !== undefined) {
// Handle the event with KeyboardEvent.keyCode and set handled true.
}
if (handled) {
// Suppress "double action" if event handled
event.preventDefault();
}
}, true);
Прямо сейчас, если предположить, что вы не обрабатывает событие KeyDown, вы можете также использовать
var whichCode = e.charCode !== undefined ? e.charCode : e.keyCode;
Обратите внимание, что это exactly how it is done in jQuery для совместимости браузера:
if (event.which == null) {
event.which = original.charCode != null ? original.charCode : original.keyCode;
}
Где этот код выполнен? любезно добавьте полный код. вы должны использовать это в обработчике событий! – wallop
скорее проверьте для e.which: 'var whichCode = e.which || e.keyCode; 'предполагается, что e является объектом события. –