2012-01-30 70 views
0

我目前使用以下代码从我的Firefox加载项中触发事件。使用jQuery创建/触发事件

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); 
    } 

我尝试使用

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

实现与jQuery相同,但它不工作。 jQuery不会触发原始代码嵌入的事件。

我的错在哪里?

回答

1

jQuery documentation提到下列:

虽然.trigger()模拟的事件激活,完成一个 合成事件对象,它不完美地复制一个 天然存在的事件。

这不是很清楚它们是什么意思,所以我不得不看看源代码。显然,jQuery并没有真正创建一个本地事件对象。它只会触发自己的事件处理程序(通过jQuery添加的处理程序)以及它可以在onfoo属性中找到的任何事件处理程序。不会触发通过addEventListener()添加的事件处理程序。与事件相关的本机操作不会被触发(但jQuery似乎在处理一些特殊情况)。总结:更好地坚持以前创建活动的方式。它可能更冗长,但它符合你的期望。