2012-03-13 100 views
1

我創建一個BHO並將腳本插入Facebook頁面..我的問題如下。有時,當我插入腳本插入到頁面(比方說)和一些事件綁定到事件持有者即jQuery事件保持關閉後文檔

$('#contentArea').on('click','#myId',Dosomething); 

他們工作得很好。

之後,我從這個頁面刪除腳本,然後再次添加它們(請不要問爲什麼,這是因爲facebook並不總是爲新頁面生成新文檔,而是它會更改文件的一部分),並且這次事件運行多次(取決於我刪除多少次然後添加它們,因此對於1次刪除和1次添加它們運行兩次,2次刪除並且2次添加它們運行3次等),儘管小腳本的第一行是

$('#contentArea').off(); 

缺少什麼我在這裏,因爲我知道處理程序沒有從文檔或節點刪除...也許這是一個事件冒泡問題他們嗎? 順便說一下,我正在從事internet explorer 9

+0

問題是清楚的。做得好。 – 2012-10-05 11:27:08

回答

1

我想你應該至少做

$('#contentArea').off("click"); 

或事件監聽器可能不,也許去掉甚至

$('#contentArea').on('click','#myId'); 
0

如果點是刪除一個委託處理程序調用一個函數,你應該可以,刪除綁定到該事件和元素的函數?

$('#contentArea').off('click','#myId',Dosomething); 
+0

試了一下,doenst work..pls看到我的意見,以斯特凡的更多信息:( – Fazi 2012-03-13 09:05:50

0

根據API文檔off()需要ATLEAST一個參數。

事件一個或多個空格分隔的事件類型和可選的命名空間, 或剛剛命名空間,如「點擊」,「keydown.myPlugin」,或 「.myPlugin」。

試着用這種方式解除所有的click事件; $('#contentArea').off('click');

您可能也可以使用unbind()解除所有事件。

在最簡單的情況下,如果沒有參數,.unbind()將刪除附加到元素的所有 處理程序。

+0

是啊...這是我的一部分嚴重的錯誤..但是...糾正問題沒有幫助..我試過$( '#contentArea')。off('click'),甚至$('#contentArea')。off('click','#myId',Dosomething),並且沒有結果...我嘗試將它們添加爲第一行在腳本中,也是在文檔完成後沒有結果..也許我應該嘗試命名空間? – Fazi 2012-03-13 07:42:26

+0

我只是想提到,Facebook不會生成一個新的文件,讓我們說當你從你的朋友的朋友列表導航到他的信息頁, (通過其他方式生成內容),這是問題開始發生的時間......但是如果我按f5刷新頁面,就會生成一個新文檔,事件再次正常工作。這就是爲什麼我相信,當從friendslist導航到info頁面並且再次返回時,文檔對象保持不變,並且因爲我的腳本運行了2次,事件獲得了兩次註冊,這就是爲什麼他們運行了兩次 – Fazi 2012-03-13 07:48:30

+0

你如何重新加載你的腳本,你真的需要嗎? – Stefan 2012-03-13 08:44:39

0

更好的解決方案是,爲什麼不首先檢查元素以查看它是否有處理程序?如何才能完成這樣的任務。很簡單,我們在元素上留下痕跡,讓我們知道是否已經安裝了處理程序。該元素是一個DOM畢竟,所以我們可以在一個對象成員只是添加到它,或者我們可以添加一個屬性

$(this).attr('myBHOInstalled','true'); 

然後

if($(this).attr('myBHOInstalled') !== 'true') { 
    installMyBHO($(this)); 

}