2012-01-30 90 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似乎在處理一些特殊情況)。總結:更好地堅持以前創建活動的方式。它可能更冗長,但它符合你的期望。