Javascript 防止焦点事件发生在点击上

Javascript 防止焦点事件发生在点击上,javascript,jquery,html,Javascript,Jquery,Html,我有一个包含许多div元素的网页。此页面在连接到非常慢的机顶盒的电视上运行。该框运行EmbbedOpera浏览器版本9.50。我唯一的输入设备是机顶盒的遥控器,没有鼠标!在这个网页(电视)中,用户使用遥控器上的上/下/左/右箭头键从一个div导航到另一个div,因为没有鼠标。现在,当有人按得太快时,我正试图“消除”这些按键!我可以控制按键事件,但我在阻止焦点事件方面没有任何运气,看起来不管我在按键处理程序中做什么,它们都会被触发 问题是:如何防止焦点转到当前元素的keypress处理程序中的另一

我有一个包含许多div元素的网页。此页面在连接到非常慢的机顶盒的电视上运行。该框运行EmbbedOpera浏览器版本9.50。我唯一的输入设备是机顶盒的遥控器,没有鼠标!在这个网页(电视)中,用户使用遥控器上的上/下/左/右箭头键从一个div导航到另一个div,因为没有鼠标。现在,当有人按得太快时,我正试图“消除”这些按键!我可以控制按键事件,但我在阻止焦点事件方面没有任何运气,看起来不管我在按键处理程序中做什么,它们都会被触发

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


任何想法。谢谢。

如果要防止单击事件引起焦点,必须从
mousedown
处理程序中执行
e.preventDefault()
。无法从
单击处理程序执行此操作,因为这不是物理事件,它只是
鼠标向下
mouseup

如果要防止选项卡更改焦点,必须从keydown处理程序中选择
e.preventDefault()
。无法从
keypress
执行此操作,因为
keypress
不是物理事件,它是
keydown
keypup
事件的抽象(请注意,当您按住键时,keypress会多次触发)


您是否在处理程序中尝试了
event.stopImmediatePropagation()
?按键事件在做什么?也许他们可以通过调用元素上的
.focus()
来执行浏览器试图执行的操作?您可以继续编辑您的问题。。。你试过我的答案了吗?改为使用
keydown
。此外,问题与事件冒泡无关,冒泡仅指父节点上的处理程序,
preventDefault
不会停止冒泡,它只是阻止浏览器执行默认操作。我只是想确定你的术语是正确的。谢谢Juan,但它在Opera中不起作用。请参阅日志片段:04/16/2013 13:51:37.319信息:RemoteControl:OnKeyDown:Debouncer prevented:keyCode=65521 on divMoreCategoriesButton 04/16/2013 13:51:37.335信息:RemoteControl:OnKeyPress:keyCode=65521 srElementId=divMoreCategoriesButtonNotice,即使keyDown处理程序阻止了keyCode 65521,按键处理程序仍然被调用!
$('#a').on('mousedown', function(e) {
    e.preventDefault();
})

$('#a').on('keydown', function(e) {
  if (e.keyCode == 9) { 
      e.preventDefault(); 
  } 
})