我目前使用以下代码从我的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不会触发原始代码嵌入的事件。
我的错在哪里?
答案 0 :(得分:1)
jQuery documentation提及以下内容:
虽然.trigger()模拟事件激活,但完成了 合成事件对象,它不能完美复制一个 自然发生的事件。
它们的含义并不是很清楚,所以我不得不查看源代码。显然,jQuery并没有真正创建一个本机事件对象。它只会触发自己的事件处理程序(通过jQuery添加的事件处理程序)以及它在onfoo
属性中可以找到的任何事件处理程序。通过addEventListener()
添加的事件处理程序将不会被触发。不会触发与事件相关的本机操作(但jQuery似乎正在处理一些特殊情况)。
总结:更好地坚持使用旧的创建事件的方式。它可能更冗长,但它符合您的期望。