JavaScript确定单击事件的原因

JavaScript确定单击事件的原因,javascript,jquery,events,jquery-events,Javascript,Jquery,Events,Jquery Events,假设一个DOM元素有焦点。如果用户按enter键,并且将触发单击事件,是否有方法采取行动X,但如果元素是单击而不是按enter键,是否有方法采取行动Y --更多详细信息-- 我使用的是jQuery插件(),我无法控制它。该插件在DOM中的元素上注册click事件。现在,我想修改该行为,以便在触发已注册的click事件处理程序之前发生其他操作,具体取决于事件的启动方式 我提出了两种方法,都需要注册mouseup和keydown事件 在mouseup和keydown事件处理程序中设置全局变量以缓存事

假设一个DOM元素有焦点。如果用户按enter键,并且将触发
单击
事件,是否有方法采取行动X,但如果元素是
单击
而不是按enter键,是否有方法采取行动Y

--更多详细信息--

我使用的是jQuery插件(),我无法控制它。该插件在DOM中的元素上注册
click
事件。现在,我想修改该行为,以便在触发已注册的
click
事件处理程序之前发生其他操作,具体取决于事件的启动方式

我提出了两种方法,都需要注册
mouseup
keydown
事件

  • mouseup
    keydown
    事件处理程序中设置全局变量以缓存事件属性,然后在
    单击
    处理程序中访问此全局变量。由于无法保证是什么触发了
    click
    处理程序,因此我必须设置一个超时来清除这个全局变量。这将引入线程问题

  • 硬编码我认为会导致触发
    单击
    事件的事件。根据经验,当
    e.type='mouseup'&&e.button==0
    e.type='keydown'&&(e.keyCode==13 | e.keyCode==32)
    时会发生这种情况。此逻辑的问题在于,它假定这些是触发
    click
    事件处理程序的唯一方式。我可以想象一些用户代理能够更改最终向底层对象发送
    单击事件的键。当点击DOM元素时,触摸屏可能会触发一些其他事件

  • 我的问题的精练版本是,是否有任何方法可以

  • 确保这些
    mouseup
    /
    keydown
    事件是导致单击事件的唯一事件
  • 分离现有的
    单击
    处理程序,并从新的
    鼠标上手动调用它们
    /
    按键
    事件处理程序
  • 可靠地检测导致
    点击
    事件发生的事件(例如,以某种方式访问启动事件的
    keyCode
    /
    按钮
    属性)

  • 对于您的方法#2,您同时使用了
    mouseup
    keydown
    事件侦听器,对吗?这意味着什么:我可以想象一些用户代理能够更改最终向底层对象发送
    点击事件的按键?你的意思是:触摸屏可能在[触摸/点击]时触发其他事件关于DOM元素?我试图了解的是,似乎无法知道哪些事件可能最终导致触发
    单击
    事件。我可以将Firefox配置为在某个元素具有焦点且我按下“P”键时触发单击事件吗?还有其他允许这种配置的浏览器吗?我怎么知道enter、space和左键单击(我在这里用left表示主要的鼠标按钮)是触发
    单击事件的唯一方法?触发
    点击
    事件的要求是否已在任何地方定义?对于您的方法#2,您同时使用
    鼠标
    按键
    事件侦听器,对吗?这意味着什么:我可以想象一些用户代理能够更改最终向底层对象发送
    点击事件的按键?你的意思是:触摸屏可能在[触摸/点击]时触发其他事件关于DOM元素?我试图了解的是,似乎无法知道哪些事件可能最终导致触发
    单击
    事件。我可以将Firefox配置为在某个元素具有焦点且我按下“P”键时触发单击事件吗?还有其他允许这种配置的浏览器吗?我怎么知道enter、space和左键单击(我在这里用left表示主要的鼠标按钮)是触发
    单击事件的唯一方法?触发
    点击
    事件的要求是否在任何地方实际定义?