为什么jQuery会重启事件两次?

我只是注意到,只要调整浏览器窗口大小,jquery resize事件就会触发两次。 我找不到任何将此列为默认行为的文档。 我已经使用jQuery 1.4和1.5在最新版本的Chrome和Firefox中对此进行了测试。

有没有人看到这种行为? 它有具体原因吗?

更新 :如果我单击浏览器窗口上的最大化按钮一次,就会发生这种情况。 据我所知,如果我手动将窗口拖动到不同的大小,事件将被多次触发,但最大化按钮不应该是这种情况。

使用的代码测试如下。 浏览器resize的文本输出两次:

       $(window).resize(function(){ console.log('Browser Resized'); });     

这不是jQuery的问题。 这取决于浏览器的实现。 浏览器决定何时触发’resize’。 您可以使用window.onresize = function(){…}进行测试。 它会是一样的。 与jQuery无关。 我测试了Win7 chrome,它被激发了两次,而在Win7 opera / safari中它被触发了一次。

JQuery:只有在完成大小调整后才能调用RESIZE事件?

显示至少其他人遇到此问题。 在1.3.2中,由于事件系统的某些内容,它被列为bug: http : //benalman.com/code/projects/jquery-resize/docs/files/jquery-ba-resize-js.html

这是使用setTimeout解决问题的简单方法。

jQuery的

 var resizeTimeout $(window).resize(function(){ clearTimeout(resizeTimeout) resizeTimeout = setTimeout(function(){ console.log("resized") },100) }); 

JavaScript的

 var resizeTimeout window.addEventListener("resize", function(){ clearTimeout(resizeTimeout) resizeTimeout = setTimeout(function(){ console.log("resized") },100) }) 

我测试了本案例,我也接到了两个电话。 所以我认为,等等……这是一个错误,不是吗,它是一个在聚类函数调用之前/之后…我回到JQuery的文档来调整resize():

resize处理程序中的代码永远不应该依赖于调用处理程序的次数。 根据实施情况,resize事件可以在resize正在进行时连续发送(在Internet Explorer和基于WebKit的浏览器(如Safari和Chrome)中的典型行为),或者仅在resize操作结束时发送一次(典型行为在其他一些浏览器,如Opera)。

还有其他必要的词吗?