我需要确定导致焦点事件的原因。
理想情况下,我想区分点击,标签/键盘输入和手动(通过代码)触发器。
我该怎么做?
我正在查看事件对象,但我没有看到任何有用的东西。
答案 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
个事件以检测基于鼠标的焦点更改,并在某处设置标记以记住它。然后你就有了这个:
originalEvent
,则手动触发焦点更改(即$x.focus()
或类似事件)。您必须小心,您的点击和焦点事件的顺序是正确的,并且您需要确保在完成后清除该标记。这可能不是防弹,但可能不是必须的。