使用 jQuery 创建/触发事件

发布于 2024-12-29 22:23:40 字数 504 浏览 1 评论 0原文

我当前使用以下代码从我的 Firefox 附加组件触发事件。

    var hiddenArea = document.getElementById("section_help");
    if (hiddenArea) {
        var evt = document.createEvent("MouseEvents");
        evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
        hiddenArea.dispatchEvent(evt);
    }

我尝试使用 jQuery 来实现相同的目的,

$("#section_help").trigger("click");

但它不起作用。 jQuery 不会触发原始代码嵌入的事件。

我的错在哪里?

I currently use the following code to trigger an event from my Firefox Add-On.

    var hiddenArea = document.getElementById("section_help");
    if (hiddenArea) {
        var evt = document.createEvent("MouseEvents");
        evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
        hiddenArea.dispatchEvent(evt);
    }

I tried to achieve the same with jQuery using

$("#section_help").trigger("click");

but it doesn't work.
jQuery doesn't trigger the event that was embedded by the original code.

Where is my fault?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

银河中√捞星星 2025-01-05 22:23:40

jQuery 文档提到了以下内容:

尽管 .trigger() 模拟了事件激活,但完成了
合成的事件对象,它不能完美地复制
自然发生的事件。

不太清楚他们的意思,所以我不得不查看源代码。显然,jQuery 并没有真正创建本机事件对象。它只会触发自己的事件处理程序(通过 jQuery 添加的事件处理程序)以及它在 onfoo 属性中可以找到的任何内容。通过 addEventListener() 添加的事件处理程序不会被触发。与该事件关联的本机操作不会被触发(但是 jQuery 似乎正在处理一些特殊情况)。

总结一下:最好坚持您创建活动的旧方式。它可能更冗长,但它符合您的期望。

The jQuery documentation mentions the following:

Although .trigger() simulates an event activation, complete with a
synthesized event object, it does not perfectly replicate a
naturally-occurring event.

It's not really clear what they mean by that so I had to look at the source code. Apparently, jQuery doesn't really create a native event object. It will merely trigger its own event handlers (the ones added via jQuery) and whatever it can find in onfoo properties. Event handlers added via addEventListener() won't be triggered. Native actions associated with the event won't be triggered (jQuery seems to be handling a few special cases however).

To sum up: better stick with your old way of creating events. It might be more verbose but it does what you expect.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文