2015-05-04 2 views
2

Я использую следующий код, чтобы получить значение из группы клавиша Javascripte.which не работает в IE 9

var whichCode = (window.event) ? e.which : e.keyCode; 

Однако, она работает нормально, за исключением IE 9. Он возвращается неопределенный на е .который.

+0

Где этот код выполнен? любезно добавьте полный код. вы должны использовать это в обработчике событий! – wallop

+1

скорее проверьте для e.which: 'var whichCode = e.which || e.keyCode; 'предполагается, что e является объектом события. –

ответ

0

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

var keycodeValue = e.which || e.keyCode; 

где е событие получили

1

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; 
} 
+0

Извините, если это ошибка с моей стороны; Здесь нет строгого сравнения? Я говорю о 'e.which! = Undefined'. '0 == undefined', а' 0! == undefined'. – bardzusny

+0

@bardzusny Нет, это не обязательно: 0 не является неопределенным. Но это чище, поэтому я отредактировал. –

+0

Вы правы, тяжелое утро на меня наносит ущерб. Я набрал неверный код в консоли узла. – bardzusny

Смежные вопросы