2013-04-16 61 views
2

我需要根据另一个元素的高度来设置元素的高度。比方说,当这个元素完成渲染时,它的高度是490px。如何在元素完成渲染后立即运行函数?

如果我在$(document).ready()的函数开头查询其他元素的高度,则返回432px。

如果我查询setTimeout(function, 100)内的其他元素的高度,则返回大约475px。

如果我碰到setTimeout高达150左右,元素完成渲染,我得到190.但显然我不能指望这一点。

如果可能的话,我不想等整个页面完成加载;我只想等待这个元素。

似乎load事件应该可以在任意元素上工作,但据我所知,在浏览器中或至少在Chrome中未实现。

编辑:该元素不是图像和(几乎肯定)没有图像将永远在元素内。这只是一个<div>与其他一些<div> s和<p> s和东西在里面。在应用CSS的过程中,高度显然会被查询。代码示例即将出版。

编辑2Here's a fiddle被黑掉了我的网站。 (请原谅可怕的标记;我还没有清理Drupal的输出。)小提琴并没有表现出我试图纠正的不良行为,但是,因为整个片段在Javascript的相关部分之前呈现跑。

有没有办法做到这一点,或者我坚持window.onload

+2

并且那是什么元素?一个图像 ? –

+2

你能告诉我们你的代码吗?最好在一个jsFiddle? – Leng

+0

@Mhamhammad是的,或者可能元素正在扩展以适合加载图像? – Leng

回答

0

您至少需要使用$(window).load(),因为您需要等待可能影响页面元素尺寸的图像和CSS表格等其他资源。

load()也可以在图像上工作。您应该能够在不需要setTimeout的情况下正确完成任务。

http://api.jquery.com/load-event/包含一个通知,它不能可靠地为图像工作。

+2

'.load'从jQuery 1.8开始已弃用,所以不推荐使用。 –

+0

然后使用'.on(“load”,..)'。 http://api.jquery.com/category/deprecated/deprecated-1.8/这个方法是'.on('load',handler)'._ – Halcyon

+1

的一个快捷方式,如果这是最好的,但它可能会有帮助,如果你在答案中改变它。 –

2

你可以做这样的事情:

<img src="myImage.gif" onload="loadImage()"> 
+5

不是每个元素都是图像 – Ejaz

+0

@ejay需要渲染的事物不会瞬间(或几乎是瞬间)发生,通常是图像。他没有指定,但加载图像延迟很常见。这不适用于div,因为div是瞬间加载的。它们内部的内容可能不是,但如果你正在用函数填充div内的内容,那么你应该检查内容是否加载了其他函数。 –

+0

他在那个容器里面有多个图像呢? – Ejaz

相关问题