我发现一个问题似乎总是在IE8中打开一段html和javascript时重现。
<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中发生的,也不在其他浏览器中发生(或者至少是其最新版本)。
更新
防止resize()的连续触发的一个解决方案是,如果浏览器是IE8,则在document.body.onresize上添加处理程序。
var ieVersion = getInternetExplorerVersion();
if (ieVersion == 8) {
document.body.onresize = function () {
};
}
else {
$(window).resize(function () {
});
}
但是这不能回答我的问题:是否在IE8中持续触发resize()一个错误?
答案 0 :(得分:3)
如果“拖动时显示窗口内容”已打开,您将被淹没调整大小事件。我猜你是在一个单独的Windows机器上测试IE8,它启用了这个效果(显示属性 - &gt;外观 - &gt;效果......)。
为了抵消这一点,你可以包装&amp;捕获调整大小事件以驯服它们:http://paulirish.com/demo/resize
这篇文章说Chrome,Safari&amp;歌剧也受此影响。
答案 1 :(得分:0)
如果页面上的元素调整大小(as described in this question),我只会看到您正在描述的问题。您的示例对我不起作用,但我假设您将控制台消息附加到您所在的log
div中,这意味着它正在调整div的大小并触发窗口调整大小事件。
李给出的答案是正确的,但链接中的方法对我不起作用。这是我做的:
var handleResize = function(){
$(window).one("resize", function() {
console.log('Handler for .resize() called');
setTimeout("handleResize()",100);
});
}
handleResize();
这样,处理程序一旦触发就会解除绑定,并且只有在您完成可能重新触发页面调整大小的所有操作后才会重新绑定。我扔了一个setTimeout来提供额外的限制。如果脚本需要更多时间,请增加值。