Может ли javascript сказать разницу между левой и правой клавишей shift?

в основном это проверка на вменяемость. Код ключа для обеих клавиш shift-16. Означает ли это, что на самом деле невозможно различить события сдвига влево и вправо в браузере?

4 ответов


в новых браузерах, поддерживающих DOM3 можно использовать event.location чтобы проверить расположение.

на в DOM3 спецификаций, есть 4 константы, определенные для местоположения, DOM_KEY_LOCATION_STANDARD, DOM_KEY_LOCATION_LEFT, DOM_KEY_LOCATION_RIGHT иDOM_KEY_LOCATION_NUMPAD.

в этом случае, вы можете сделать:

if (event.location === KeyboardEvent.DOM_KEY_LOCATION_LEFT){

} else if (event.location === KeyboardEvent.DOM_KEY_LOCATION_RIGHT){

}

Internet explorer способен различать сдвиг влево и вправо с помощью свойства shiftLeft:

свойство shiftLeft (событие)

в противном случае, они неразличимы.


можно использовать event.code (физическая строка клавиатуры) вместо event.key (числовое значение ascii).

event.code MDN docs

KeyboardEvent.свойство code представляет физическую клавишу на клавиатуре (в отличие от символа, созданного нажатием клавиши).

если вы прокрутите вниз до "значения кода" внизу, вы можете найти две клавиши Shift:

"ShiftLeft", "ShiftRight"


самый простой способ сделать это

$(document).ready(function(){
  $("html").keydown(function(e) {

      if (e.shiftKey) {
         if (event.location == 1) console.log('left shift');
         if (event.location == 2) console.log('right shift');
      }

  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Примечание: при запуске фрагмента кода для активации клавиш клавиатуры необходимо щелкнуть внутреннее пустое пространство. Это тестируется в Chrome и Safari.