Javascript:keydown事件没有解雇

时间:2016-06-06 15:54:49

标签: javascript google-chrome userscripts

我正在使用以下代码编写用户脚本:

(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(),但是当我按箭头键时调试器没有显示。

3 个答案:

答案 0 :(得分:3)

event propagation可能会在元素处理程序的某个点停止,之后它会冒泡到window(可能是因为写得不好onkeydown返回{{1}防止默认操作,不关心这也会阻止传播。)

您应该使用捕获来附加您的侦听器,以便在它起泡之前在false捕获该事件:

window

答案 1 :(得分:1)

你拼错了keyCode:

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

答案 2 :(得分:0)

您的事件可能会按预期捕获。使用console.log而不是alert来验证该事件是否被捕获。它不适用于alert的原因对我来说是未知的:我怀疑这与事件触发时间和警报对话框停止正常工作流程有关