2012-03-14 21 views
0

此問題與堆棧溢出問題「window.resize event firing in Internet Explorer」密切相關。Javascript - 刪除窗口「調整大小」偵聽器

的問題: 我試圖在Internet Explorer 8來修復調整大小的問題目前,調整大小功能被稱爲多次造成IE基本上鎖定 - 用戶可以不再使用調用JavaScript動作按鈕。

以前的嘗試(S):

var resizeTimeout; 
var resizeHandler = function() { 
    clearTimeout(resizeTimeout); 
    //$(window).unbind('resize', resizeHandler); 
    //window.removeEventListener('resize'); 
    window.removeEventListener('resize', resizeHandler, false); 
    scrollHandler(); 
    setTimeout("$(window).resize(resizeHandler);", 100); 
    return true; 
} 
//$(window).resize(resizeHandler); 
window.addEventListener('resize', resizeHandler, false); 

問題:看來,window無法實現addEventListenerremoveEventListener和解除綁定的jQuery不會繼續發飆了停止IE瀏覽器。它可以在所有其他瀏覽器中正常工作。

希望的行爲:這裏的目標是真的讓IE停止重複執行代碼,所以其他功能如onclick事件工作。


有沒有人知道我可以刪除調整大小事件後,它已被添加或只是使IE停止被阻止。 (< - 如果加分就可以使IE不受到阻礙。)


分辨率:裏面的scrollHandler功能使用var前綴的變量未聲明的。加入var使所有邪惡的仙女都消失了。

回答

1

我想你會以錯誤的方式去做。你應該做的是使用該超時來阻止「scrollHandler()」的調用,直到窗口大小調整活動暫停了一段時間(比如你正在使用的延時爲100ms)。

var resizeTimeout; 
function resizeHandler() { 
    cancelTimeout(resizeTimeout); 
    resizeTimeout = setTimeout(scrollHandler, 100); 
} 
$(window).resize(resizeHandler); 

爭取做DOM更新(我假設是什麼內幕「的scrollHandler」雲)在「調整」的處理程序是真的沒有任何瀏覽器一個好主意。通過這樣做,你根本不需要擺脫「調整大小」處理程序。

編輯 —好吧,現在我明白了,那就是你正在嘗試做的。我仍然認爲這樣做更簡單。

+1

我正在開發的應用程序,我沒有開發,它在頁面移動時重新定位彈出窗口。因此,調整大小的結果必須發生。但是,我添加了一個計數器,可以打印resize事件被調用的次數,並且只會被調用大約3次。原來scrollHandler函數內部是一個變量,前面沒有「var」。定義變量「var obj」解決了這個問題。 – teynon 2012-03-14 18:15:01