如何找出哪些JavaScript事件触发?
我有一个select列表:
<select id="filter"> <option value="Open" selected="selected">Open</option> <option value="Closed">Closed</option> </select>
当我selectClosed
页面重新加载。 在这种情况下,它显示封闭的票(而不是打开)。 当我手动执行它工作正常。
问题是,当我selectClosed
Watir时,页面不会重新加载:
browser.select_list(:id => "filter").select "Closed"
这通常意味着一些JavaScript事件不会被解雇。 我可以用Watir发射事件:
browser.select_list(:id => "filter").fire_event "onclick"
但我需要知道哪个事件发生。
有没有办法找出哪些事件是为一个元素定义的?
看起来像Firebug (火狐插件)有答案:
- 打开Firebug
- 右键单击HTML选项卡中的元素
- 单击
Log Events
- 启用控制台选项卡
- 点击Persist in Console选项卡(否则Console页面重新加载后将清除Console标签页)
- select
Closed
(手动) -
在“控制台”选项卡中会出现这样的内容:
... mousemove clientX=1097, clientY=292 popupshowing mousedown clientX=1097, clientY=292 focus mouseup clientX=1097, clientY=292 click clientX=1097, clientY=292 mousemove clientX=1096, clientY=293 ...
来源: Firebug提示:日志事件
只是想我会补充说,你可以在Chrome中做到这一点:
Ctrl + Shift + I (开发人员工具)> Sources> Event Listener Breakpoints(在右侧)。
您也可以通过右键单击元素,然后浏览其属性(右侧面板)来查看已经附加的所有事件。
例如:
不知道它是否像萤火虫选项一样强大,但已经足够我的大部分东西。
另一个有点不同,但令人惊讶的是可视化的select: http : //www.sprymedia.co.uk/article/Visual+Event+2
它突出显示了页面上所有已绑定的元素,并popup了显示被调用的函数的元素。 相当漂亮的书签! 还有一个Chrome插件,如果这是更多的东西 – 不知道其他浏览器。
AnonymousAndrew也指出了monitorEvents(window);
这里
关于Chrome,请通过命令行API检出monitorEvents()。
- 通过菜单>工具> JavaScript控制台打开控制台。
- input
monitorEvents(window);
-
查看充满事件的控制台
... mousemove MouseEvent {dataTransfer: ...} mouseout MouseEvent {dataTransfer: ...} mouseover MouseEvent {dataTransfer: ...} change Event {clipboardData: ...} ...
文档中还有其他示例。 我猜这个function是在上一个答案之后添加的。