确定触发焦点事件的内容?
我需要确定导致焦点事件的原因。
理想情况下,我想区分点击,标签/键盘输入和手动(通过代码)触发器。
我怎样才能做到这一点?
我正在看事件对象,但我没有看到任何有用的东西。
如果焦点来自$x.focus()
调用,则事件将没有originalEvent
属性,因为浏览器没有事件,因此:
if(ev.hasOwnProperty('originalEvent')) { // Focus event was manually triggered. }
要区分基于键盘和鼠标的焦点事件,您可以尝试将keydown
处理程序绑定到其他所有内容以检测Tab或Shift-Tab,但这将是一个严重的黑客攻击,可能不可靠; 例如,在iPad上,你没有点击Tab移动到下一个字段,你在弹出键盘中点击Next或Previous来移动,那些可能根本没有注册为按键。
关于可能感兴趣的click
事件也有类似的问题:
在jQuery中,如何区分编程和用户点击?
正如您在注释中所述,您可以捕获click
事件以检测基于鼠标的焦点更改,并在某处设置标记以记住它。 然后你有这个:
- 如果jQuery事件中没有
originalEvent
,则手动触发焦点更改(即$x.focus()
或类似事件)。 - 如果设置了单击处理程序标志,则焦点更改来自鼠标操作。
- 否则焦点变化来自键盘事件。
您必须小心,您的点击和焦点事件的顺序是正确的,并且您需要确保在完成后清除该标志。 这可能不是防弹,但可能不是必须的。