我將一個事件偵聽器附加到窗口對象。然後在腳本中使用document.write。 (我知道,這是邪惡的,我在這件事上沒有選擇。)問題是,document.write消除了我的聽衆。有可能避免這種情況嗎?如何創建生存於document.write的JS事件偵聽器?
這裏是一個說明該問題的小提琴:http://jsfiddle.net/Fuhzu/
我將一個事件偵聽器附加到窗口對象。然後在腳本中使用document.write。 (我知道,這是邪惡的,我在這件事上沒有選擇。)問題是,document.write消除了我的聽衆。有可能避免這種情況嗎?如何創建生存於document.write的JS事件偵聽器?
這裏是一個說明該問題的小提琴:http://jsfiddle.net/Fuhzu/
那是不可能的。 document.write
卸載當前文檔,並創建一個新文檔。
的演示,以確認:http://jsfiddle.net/Gk3cX/
window.test = document; //Cache document
document.write('<button onclick="alert(window.test===document)">CLick</button>');
// Clicking shows false! The document has changed!
您的覆蓋當前文檔,而無需卸載唯一的選擇是innerHTML
:
document.body.innerHTML = "Overwritten document's content, kept events.";
我已經找到了解決辦法是簡單地再在document.write之後附加監聽器。
更新:Doh!這一工程在Chrome,但FF拋出一個錯誤:如果我document.writing之前在卸裝處理
attempt to run compile-and-go script on a cleared scope
也許....
更新2:都能跟得上:http://jsfiddle.net/sprugman/KzNbX/1/
如何用自己的函數替換document.write
,這樣就不會破壞頁面。
事情是這樣的:
document.write = function(str){
document.body.innerHTML = str;
};
或者,如果你不想刪除整個頁面:
document.write = function(str){
document.body.innerHTML += str;
};
,我沒有使用文件試過這種.write,但也許它有幫助: http://api.jquery.com/live/
Attach an event handler for all elements which match the current selector, now and in the future
似乎不起作用http://jsfiddle.net/Fuhzu/2/ =( – 2012-01-06 16:31:36
沒有選擇?不能使用div id = me me.innerHTML =「hah」?或者hah = document.createElement(span)me.appendChild(hah)? – 2011-12-29 20:18:16
否 - 我必須使用其他一些現有的代碼。這可能有一天會改變,但不會立即。 – sprugman 2011-12-29 21:11:00