我正在使用以下代码编写用户脚本:
(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 :(得分: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
的原因对我来说是未知的:我怀疑这与事件触发时间和警报对话框停止正常工作流程有关