2014-02-24 102 views
0

我正在創建一個應用程序,其中用戶可以使html佈局和附加到它的JavaScript。刪除動態JavaScript標記不會刪除附加事件

現在我要把它因此,當他們點擊一個按鈕,就進入預覽模式,他們可以看到它在行動..所以當他們點擊我在添加JavaScript代碼(用自己的JavaScript) iframe的頭..這一切工作正常!

但問題是,當他們離開預覽模式下,我刪除JavaScript代碼,但是當我有這樣的代碼:

$('#button').click(function() 
{ 
    alert("ok"); 
}); 

它仍然警告確定,當我點擊HTML按鈕(在不預覽模式!),這不應該發生!

看來,當刪除JavaScript標記,聽衆不會被刪除..或者我做錯了嗎?

現在我的問題:有沒有辦法讓它添加eventlisterens被刪除當我刪除腳本標記?

AND YES:我知道你可以使用.off()移除事件處理程序,但是因爲我已經附加了事件處理程序,所以這些也將被刪除,而且我不想這樣!

因此,我可以想出兩個選項: - 重建整個iframe - 存儲用戶添加的事件處理程序,以及在離開預覽模式時刪除它們。

在此先感謝

+0

那麼你的代碼在哪裏? –

+0

也許試試這個:http://stackoverflow.com/questions/13945025/jquery-remove-all-event-handlers-inside-element。或者,也許你可以重新加載你的iframe。 – Gohn67

+0

代碼在這裏不相關,因爲它是一個簡單的添加和刪除腳本元素,並且工作正常.. @ Gohn67謝謝,但不是我在找什麼:) –

回答

0

因爲它不是一般的jQuery,而且也是香草javascript,所以跟蹤javascript更改的工作太多了,所以重建iframe是最好的選擇。

0

設置事件:

var $button = $('#button'); 
$button.on("click", function() { 
    alert("ok"); 
}); 

脫下事件:

$button.off("click"); 

你可以脫下特定功能太

var $button = $('#button'); 
var eventFunction = function() { 
    alert("ok"); 
}); 

// Set event up 
$button.on("click", eventFunction); 

// Take event off 
$button.off("click", eventFunction); 

如果你想刪除從元素的所有事件,你可以使用

$("#yourSelector").off() 
+0

不是我在找什麼..請在發佈之前閱讀問題.. –

1

每次「評價」的JavaScript,它成爲瀏覽器的「形象」的一部分,並且源是否存在的頁面不再事項。您需要手動取消綁定事件,或者替換事件綁定的HTML段。

從HTML元素中刪除事件,你可以使用:

element.parentNode.innerHTML = element.parentNode.innerHTML 

這將重新使用相同的HTML DOM樹。

+0

關於如何知道哪些事件處理程序是從JavaScript評估的角度添加的任何想法? –

+0

據我所知,你不能。我已經用可以嘗試的東西更新了答案。可能足以滿足你正在嘗試做的事情。 – sabof

+0

嗯謝謝,但事情我有很多點擊處理程序已連接,當我重建dom這些也將被刪除,我不想..但我會很有必要,因爲它要麼或找到腳本運行後附加了哪些事件處理程序..所以我在等待更多關於找到它們的響應:) –

0

您需要解除綁定事件。

您可以通過使用jQuery unbind()off() 這樣做:

$("#button").unbind("click"); 

$("#button").off("click"); 

演示:http://jsfiddle.net/a6NJk/664/
jQuery的文檔:http://api.jquery.com/off/

另一個很好的答案: Best way to remove an event handler in jQuery?

+0

我怎麼知道哪個eventhandlers被連接?因爲所評估的JavaScript來自用戶!我不知道他們使用什麼事件。 而我不能這樣做,因爲這個好,刪除所有的聽衆,我不想這樣。 –