jQueryresize不适用于FireFox,Chrome和Safari

$("#dvMyDIV").bind("resize", function(){ alert("Resized"); }); 

要么

 $("#dvMyDIV").resize(function(){ alert("Resized"); }); 

问题

  1. 为什么这不适用于FireFox,Chrome和Safari?
  2. 这可以被认为是一个jQuery错误,因为没有为其他浏览器处理resize?
  3. 唯一的解决方法是调用SetTimeout函数来检查clientHeight和clientWidth吗?
  4. 任何使用jQuery的变通方法?

我相信JavaScript resize事件仅适用于框架或窗口,而不适用于DIV。

例如,请参阅此页面 :

只要用户或脚本调整窗口或框架的大小,onResize even处理程序就可用于执行指定的代码。 这允许您查询窗口元素的大小和位置,动态重置SRC属性等。

因此,如果你想检测窗口的大小调整,在jQuery中你应该使用$(window).resize(function() { });

编辑:如果你想观看DIV的大小,这取决于你的意图。 如果您正在使用JavaScriptresize,那么您可以实现一个方法来执行resize并让该句柄调用任何其他resize代码。

否则,如果您只是在有人调整窗口时调整DIV以resize,那么它是否只能将resize监听器附加到窗口然后检查DIV是否已resize(即存储旧的宽度值) /高度并在resize时检查它们?

最后,你可以考虑在宽度/高度属性上使用watch ,虽然我不知道这是否完全与浏览器兼容(想想这可能只是Mozilla)。 我确实找到了这个jQuery插件 ,看起来它可能会做同样的事情(稍作修改)。

您是否尝试将myDiv设置为特定大小?

试试下面的JavaScript代码。 我用它来调整一个div,它根据从flash文件返回的高度来保存一个flash对象,它对我来说似乎没问题。

 function setMovieHeight(value) { var height = Number(value) + 50; document.getElementById("video").height = height; } 

jQuery等效应该是:

 function setHeight(value) { var height = number(value) + 50; $('#MyDiv').attr('height') = height; } 

resize似乎只适用于windows对象。

这不是问题为什么? 我们希望在重新resize时监视DIV。

举个明显的例子,jQuery UI,可resize。 是的,用户通过鼠标拖动调整div,现在是什么? 也许内部的内容已resize,我们想了解它。 我们是否应该在最初的reszing代码中将所有代码放在一个巨大的熔炉中? 我不这么认为。

另一个快速浏览器什么都不做,叹了口气。

为什么期望调整#dvMyDIV的大小? 可能是因为其他原因导致该元素的大小调整,也许窗口被resize? 如果是这样,试试吧

 $(window).resize(function(){alert("Resized");}); 

我可能会建议这样的事情:

1)在页面加载时,获取div的宽度并将其放入全局变量中

2)执行任何操作时直接或隐式调整div的大小(我假设是一个javascript驱动的事件)检查新宽度与旧宽度,并用新宽度更新全局值。

这是一个更精致和实际的例子,它根据窗口resize事件执行大量resize数学运算。 在ff 3.6,safari 4.0.4和chrome中出色地工作。 在ff 3.5中它有点厚实。 因此它应该在各个板上的mozilla和webkit中工作。 我避开了其他浏览器,因为我真的不喜欢它,并且代码是如此清晰而不必考虑它。 我意识到我将不得不克服这一点,当我不得不和IE附加费时,我会吞下它。

无论如何链接:

http://fridaydev.com/bookmap/proport3.html

有了MSIE,一切都很好。 使用Firefox,我想你将不得不求助于一些倾斜的技术,例如在自定义属性中存储元素的原始宽度/高度,以及使用$(elem).bind('DOMAttrModified', func) 。 然后在func()回调中,检查新宽度/高度是否与先前存储的宽度/高度不同,采取相应的resize操作并再次存储它们以用于下一个事件回调。 请注意,此方法仅适用于Firefox。 我还没有找到适合Chrome,Safari和Opera的解决方法。 也许使用window.setInterval()会做但是……听起来太过邋…事件想到它让我有点生病:(