2016-06-06 2 views
2

Я пишу userscript со следующим кодом:Javascript: KeyDown события не стреляя

(function() { 
    'use strict'; 
    window.addEventListener("keydown", arrows, false); 
    function arrows(e) { 
     debugger; 
     switch(e.keycode) { 
      case 37: alert("Left"); break; 
      case 39: alert("Right"); break; 
     } 
    } 
})(); 

В конце концов, левые и правые дела будут перемещаться к предыдущей и следующей статье в серии, соответственно, что-то вроде:

window.location = String(parseInt(window.location.href.match(/\d+$/))-1); 

Однако нажатие клавиш со стрелками не вызывает предупреждения. Сценарий явно загружен, меню разработчика Chrome показывает, что функция arrows() зарегистрирована как прослушиватель событий для window.keydown, и все же функция никогда не срабатывает. Я добавил debugger; в функцию arrows(), но отладчик не показывает, когда я нажимаю клавиши со стрелками.

+0

Есть ли обработчик события ниже в дереве остановки распространения ' keydown' (в этом случае вы должны установить третий параметр 'addEventListener' в' true', чтобы включить захват)? –

ответ

1

Вы mispelled клавиатурный код:

switch(e.keyCode) { // Code is uppercase 
    case 37: alert("Left"); break; 
    case 39: alert("Right"); break; 
} 
+0

Это не остановило бы утверждение 'debugger' от стрельбы. –

+0

@ StuartP.Bentley huh? –

+0

@ RokoC.Buljan См. Строку 5 кода в OP. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/debugger –

1

event propagation вероятно получение остановился на какой-то момент на обработчик для элемента, прежде чем он пузыри до window (вероятно, из-за плохо написанный onkeydown возвращение false чтобы предотвратить действие по умолчанию, не заботясь о том, что это также прекращает распространение).

Вы должны прикрепить слушатель захвата, так что она будет фиксировать событие в window, перед тем это пузыри:

// note the third parameter 
window.addEventListener("keydown", arrows, true); 
Смежные вопросы