0

我有一个网页,里面有一堆 div 元素。此页面在连接到非常慢的机顶盒的电视上运行。该盒子运行嵌入式 Opera 浏览器 9.50 版。我唯一的输入设备是机顶盒的遥控器,没有鼠标!在此网页(在电视上)中,由于没有鼠标,用户使用遥控器上的向上/向下/向左/向右箭头键从一个 div 转到另一个 div。现在,当有人按得太快时,我正试图“去抖动”这些按键!我可以控制按键事件,但我没有阻止焦点事件的运气,不管我在按键处理程序中做什么,似乎它们都被触发了。

问题是:如何防止焦点转到当前元素的按键处理程序中的另一个元素?调用 keypress event.preventDefault() 并返回 false(从 keypress 处理程序)不会阻止焦点转移到下一个元素。换句话说,事件无论如何都会“冒泡”。我怎样才能防止这种情况?我也尝试过更改 tabIndex 属性,但没有用。

有任何想法吗。谢谢。

4

1 回答 1

1

如果你想阻止点击事件的焦点,你必须e.preventDefault()mousedown处理程序。无法从click处理程序中执行此操作,因为这不是物理事件,它只是mousedown和的抽象mouseup

如果要防止选项卡更改焦点,则必须e.preventDefault()使用 keydown 处理程序。不能从 开始keypress,因为keypress它不是物理事件,它是keydownkeyup事件的抽象(请注意,当您按住键时,按键会触发多次)。

http://jsfiddle.net/gtwhF/

$('#a').on('mousedown', function(e) {
    e.preventDefault();
})

$('#a').on('keydown', function(e) {
  if (e.keyCode == 9) { 
      e.preventDefault(); 
  } 
})
于 2013-04-16T19:04:42.767 回答