如何找出触发了哪些 JavaScript 事件?

IT技术 javascript events watir dom-events browser-automation
2021-01-13 11:58:33

我有一个选择列表:

<select id="filter">
  <option value="Open" selected="selected">Open</option>
  <option value="Closed">Closed</option>
</select>

当我选择Closed页面重新加载。在这种情况下,它显示已关闭的票证(而不是已打开的票证)。当我手动执行时,它工作正常。

问题是,当我选择的页面不会重新加载Closed具有的Watir

browser.select_list(:id => "filter").select "Closed"

这通常意味着不会触发某些 JavaScript 事件。我可以用 Watir 触发事件:

browser.select_list(:id => "filter").fire_event "onclick"

但我需要知道要触发哪个事件。

有没有办法找出为元素定义了哪些事件?

5个回答

只是想我补充一点,您也可以在 Chrome 中执行此操作:

Ctrl+ Shift+ I(开发人员工具)> 来源> 事件侦听器断点(在右侧)。

您还可以通过简单地右键单击元素然后浏览其属性(右侧的面板)来查看已附加的所有事件。

例如:

  • 右键单击左侧的投票按钮
  • 选择检查元素
  • 折叠样式部分(最右侧的部分 - 双 V 形)
  • 展开事件侦听器选项
  • 现在您可以看到绑定到 upvote 的事件
  • 不确定它是否与 firebug 选项一样强大,但对于我的大部分内容来说已经足够了。

    另一个有点不同但令人惊讶的选项是 Visual Event:http : //www.sprymedia.co.uk/article/Visual+Event+2

    它突出显示页面上已绑定的所有元素,并具有显示调用函数的弹出窗口。相当漂亮的书签!如果您更喜欢 Chrome 插件,那么还有一个 Chrome 插件 - 不确定其他浏览器。

    AnonymousAndrew也在这里指出monitorEvents(window);

    更新:它不在Scripts开发工具(或检查器)中,您必须进入Sources然后查看右侧的菜单。
    2021-03-15 11:58:33
    @GeorgeDimitriadis 哈哈突然出现:P
    2021-03-23 11:58:33
    您选择投票按钮作为示例是否有特定原因?:P
    2021-04-04 11:58:33
    我不知道如何查看使用您建议的任何一种方式触发的事件。
    2021-04-07 11:58:33
    @aledalgrande 谢谢,已更新。(对于任何阅读的人,这仅适用于第一个解决方案,第二个仍然使用检查器)。
    2021-04-10 11:58:33

    看起来Firebug(Firefox 附加组件)有答案:

    • 打开萤火虫
    • 右键单击 HTML 选项卡中的元素
    • 点击 Log Events
    • 启用控制台选项卡
    • 单击 Persist in Console 选项卡(否则重新加载页面后控制台选项卡将清除)
    • 选择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 提示:记录事件

    直到几分钟前我才知道它。我正在写这个问题,并在此过程中找到了答案。:)
    2021-03-17 11:58:33
    Firebug 开发人员的最新博客条目:softwareihard.com/blog/firebug/firebug-tip-log-dom-events
    2021-03-29 11:58:33
    嗨,Firbug 插件已不复存在。那么我应该如何实现这一目标?请帮帮我
    2021-03-31 11:58:33
    嗨,我试过右键单击萤火虫,但我找不到日志事件选项,你能帮我找到这个吗?
    2021-04-09 11:58:33
    非常感谢,我不知道 Firebug 功能。也许我需要一段时间进行 RTFM。
    2021-04-11 11:58:33

    关于 Chrome,通过命令行 API 检查 monitorEvents()。

    • 通过菜单 > 工具 > JavaScript 控制台打开控制台。

    • 进入 monitorEvents(window);

    • 查看充斥着事件的控制台

       ...
       mousemove MouseEvent {dataTransfer: ...}
       mouseout MouseEvent {dataTransfer: ...}
       mouseover MouseEvent {dataTransfer: ...}
       change Event {clipboardData: ...}
       ...
      

    文档中还有其他示例我猜这个功能是在上一个答案之后添加的。

    停止监视使用 unmonitorEvents(window)
    2021-04-05 11:58:33
    好的!与 jQuery 结合使用:monitorEvents($('#element').get())
    2021-04-09 11:58:33

    您可以Google Chrome 开发者控制台中使用getEventListeners

    getEventListeners(object) 返回在指定对象上注册的事件侦听器。

    getEventListeners(document.querySelector('option[value=Closed]'));
    

    @Himaas - Firebug 已被 Firefox Developer Edition 取代。如果您继续安装它,您可以通过打开开发工具(右键单击 > 检查)来记录事件,然后选择调试器,然后在页面底部,您应该看到“事件侦听器断点”和一个未选中的复选框,称为“日志”。选中那个复选框。现在您要做的就是在“事件侦听器断点”下显示的列表中选择要记录的事件。从那里您将看到记录到控制台的选定事件。

    这是帮助说明的图像: 在此处输入图片说明