javascript - 如何找到以编程方式触发的 Javascript 事件的起源?

标签 javascript jquery extjs dom-events

我正在尝试调试一个场景,在提交按钮上按 Enter 键最终会导致在该按钮上触发“单击”事件。我只能假设点击事件是通过编程方式触发的。触发点击事件显然是应用程序中的正确行为,但我需要追踪其起源,因为我遇到了一些跨浏览器问题。

我正在使用 jQuery 和 ExtJS,按键处理程序都首先通过 jQuery 路由,然后通过 Ext,然后到我们的代码。该按钮是一个 Ext 对象。我已经单步执行了所有关键处理程序,并且没有遇到任何 fireEvent('click') 实例或任何解释单击事件来自何处的内容。

我知道的事件按以下顺序触发:

  1. 按下键
  2. 按键
  3. 点击

如果我禁止处理 keydown 和 keypress,click 事件仍然会触发。

点击处理程序上的调用堆栈不会告诉我事件来自哪里,因此我求助于搜索代码库并在以下实例上放置断点:

  • fireEvent('点击'
  • 触发('点击'
  • 初始化事件(

还有什么我可以搜索的吗?是否有更好的策略来调试 Javascript 事件的相互作用?

最佳答案

无论如何,这并不是什么奇怪的行为。无论使用哪种浏览器,它都是所有按钮元素的默认行为。 AFAIK,如果你在按钮上按 Enter 键,它不会触发 keyup/keydown 事件,因为它们不存在于该 DOM 元素上。

在此实例中触发点击事件是完全正常的。

我设置了一个示例来演示这一点...

http://jsfiddle.net/SMsQD/1/

页面加载时,按钮将聚焦。如果按 Enter 键,则返回的 keyCode 为 0。默认情况下会触发单击事件。

关于javascript - 如何找到以编程方式触发的 Javascript 事件的起源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6683966/

相关文章:

javascript - Angular JS 将值获取到另一个变量中

javascript - 只用 JavaScript 填充一个 div

javascript - 如何在 FOR 循环中创建暂停或延迟?

javascript - 在网格列中添加按钮。扩展程序

javascript - .getAll(...).then 不是一个函数

javascript - 保持node.js列表的顺序

javascript - 在文本区域启用滚动

jquery -/statuses/user_timeline 仍然可以通过 JavaScript 读取吗?

sencha-touch - 在sencha中将日期从json格式转换为其他格式

extjs - 如何在特定位置(索引)添加 ExtJs 组件?