2011-05-10 47 views
6

我發現了一個問題,似乎總是在IE8中打開一段html和javascript時重現。爲什麼IE8掛在jquery window.resize事件?

<html> 
    <body> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js"></script> 
    <script> 
     $(document).ready(function(){ 
      $(window).resize(function() { 
       console.log('Handler for .resize() called'); 
      }); 
     }); 
    </script> 
    <div id="log"> 
    </div> 
    </body> 
</html> 

加載該文件在IE8和開放開發工具將顯示該日誌信息的瀏覽器窗口中的一個調整大小後連續打印。

有沒有人有一個想法,爲什麼?這在IE7或IE9中不會發生,也不會在其他瀏覽器(或至少是其最新版本)中發生。

UPDATE

一個解決方案,以防止調整大小的連續的觸發器()是添加處理程序上document.body.onresize如果瀏覽器IE8是。

var ieVersion = getInternetExplorerVersion(); 
    if (ieVersion == 8) { 
     document.body.onresize = function() { 
     }; 
    } 
    else { 
     $(window).resize(function() { 
     }); 
    } 

但是這不能回答我的問題:在IE8中是否繼續觸發resize()錯誤?

+0

無法在IE8中使用此fiddel重現此問題:http://jsfiddle.net/hrtp8/ – DanielB 2011-05-10 08:47:20

回答

3

如果「在拖動時顯示窗口內容」打開,您將淹沒調整大小事件。我想你正在單獨的Windows機器上測試IE8,它啓用了這種效果(顯示屬性 - >外觀 - >效果...)。

爲了解決這個問題,你可以用&陷阱調整大小事件,馴服他們:http://paulirish.com/demo/resize

這篇文章說的Chrome,Safari瀏覽器&歌劇從這個捱得過。

0

如果頁面上的元素調整大小(as described in this question),我只能看到您描述的問題。你的例子對我來說不起作用,但我認爲你會在log div中附加控制檯消息,這意味着它正在調整div的大小並觸發窗口大小調整事件。

Lee給出的答案是正確的,但鏈接中的方法對我無效。下面是我所做的:

var handleResize = function(){ 
    $(window).one("resize", function() { 
     console.log('Handler for .resize() called'); 
     setTimeout("handleResize()",100); 
    }); 
} 
handleResize(); 

這樣,處理器只要它觸發是綁定的,你已經完成了所有可能重新觸發一個頁面大小調整動作之後僅重新綁定。我投入setTimeout來提供額外的節流。如果您的腳本需要更多時間,請增加該值。