2

CHROME (52):KeyDown событие не уволили за CapsLock в Mac

При повороте крышки блокировки ON - только KeyDown не обжигают (ни одно событие в KeyUp или Keypress)

При повороте крышки блокировки OFF - только KeyUp не обжигают (ни одно событие в KeyDown или Keypress)

FIREFOX (46):

только KeyDown событие вызывается как Caps Lock ON & OFF (нет KeyUp или Keypress)

Я прочитал о Кодовые ключи и события здесь http://www.quirksmode.org/js/keys.html и MDN здесь https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode, aaaand здесь http://unixpapa.com/js/key.html

Но ни один из приведенных выше ссылок говорит об этом странном поведении. Ожидается ли это? Если это так, любой более простой способ справиться с этим?

+0

Из интереса, что вы используете для блокировки крышки? Как пользователь, я почти думаю о закрытии крышки как «не ключевой», и я немного удивлен, что он запускает какие-либо события вообще! – aaaidan

+0

lol, я разрабатываю небольшую быструю игру-игру, вдохновленную дотой. Основываясь на комфорте, люди закрывают замок как ключ, так как он очень близок к W-A-S-D. –

+0

Ах, я подумал, была ли это игра. Приветствия. Удачи! – aaaidan

ответ

3

Да, это ожидается.

Chrome обрабатывает CAPS НА как keydown, потому что он рассматривает включения/выключения, как нажать и удерживать, как мы проводим сдвиг ключ, который превращает колпачков на поведение и выключается, когда мы отпускаем его. Это Caps Lock кнопка тоже. При включении Caps Lock, хром ручки «поворот на» как keypress и когда вы «выключить» он обрабатывает его как keyup. Но firefox обрабатывает все как keydown, что не имеет для меня смысла, когда по сравнению с тем, как хром обрабатывает то же самое.

Решение

Вы должны использовать getModifierState(), чтобы получить состояние Caps Lock. Это поддерживается в chrome и firefox.

Надеюсь, это поможет!

$(function() { 
 
    $(window).on("keydown", function(e){ 
 
    if (e.which === 20) 
 
     console.log(e.originalEvent.getModifierState('CapsLock')) 
 
    }); 
 
    $(window).on("keyup", function(e) { 
 
    if (e.which === 20) 
 
     console.log(e.originalEvent.getModifierState('CapsLock')) 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
Focus here and press 'Caps Lock'

+0

Да, это похоже на самое близкое решение, которое мы могли бы получить. Хотя для быстрой игры с нажатием клавиши с таймером обработка события «keyup» вместо события «keydown» имеет огромное значение :( –