确定触发焦点事件的内容?

时间:2011-07-17 21:48:37

标签: javascript jquery events javascript-events

我需要确定导致焦点事件的原因。

理想情况下,我想区分点击,标签/键盘输入和手动(通过代码)触发器。

我该怎么做?

我正在查看事件对象,但我没有看到任何有用的东西。

1 个答案:

答案 0 :(得分:9)

如果焦点来自$x.focus()调用,那么该事件将没有originalEvent属性,因为浏览器中没有任何事件:

if(ev.hasOwnProperty('originalEvent')) {
    // Focus event was manually triggered.
}

要区分基于键盘和鼠标的焦点事件,您可以尝试将keydown处理程序绑定到其他所有内容以检测 Tab Shift-Tab 但是这将是一个严重的黑客,可能不可靠;例如,在iPad上,您没有按 Tab 移动到下一个字段,在弹出键盘中点击 Next Previous 四处走动,可能根本没有注册成为按键。

关于可能感兴趣的click事件也有类似的问题:

  

In jQuery, how can I tell between a programmatic and user click?

正如您在评论中所述,您可以捕获click个事件以检测基于鼠标的焦点更改,并在某处设置标记以记住它。然后你就有了这个:

  1. 如果jQuery事件中没有originalEvent,则手动触发焦点更改(即$x.focus()或类似事件)。
  2. 如果设置了单击处理程序标志,则焦点更改来自鼠标操作。
  3. 否则焦点变化来自键盘事件。
  4. 您必须小心,您的点击和焦点事件的顺序是正确的,并且您需要确保在完成后清除该标记。这可能不是防弹,但可能不是必须的。