如何在元素完成渲染后立即运行函数?

时间:2013-04-16 16:26:29

标签: javascript jquery dom javascript-events dom-events

我需要根据另一个元素的高度设置元素的高度。假设当该元素完成渲染时,它的高度为490像素。

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

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

如果我将setTimeout碰到150左右,那么元素就会完成渲染,我会得到190.但显然我不能指望它。

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

似乎load事件应该适用于任意元素,但据我所知,它在浏览器中或者至少在Chrome中没有实现。

编辑:元素不是图像,(几乎可以肯定)元素中不会有图像。它只是一个<div>,其中包含其他<div>个和<p>个内容。在应用CSS的中间或其他东西中,高度显然是被查询的。代码样本即将发布。

编辑2 Here's a fiddle被黑客攻击了我的网站。 (请原谅可怕的标记;我还没有清理Drupal的输出。)尽管如此,小提琴并没有表现出我想要纠正的不良行为,因为整个片段在Javascript的相关部分之前呈现运行

有没有办法做到这一点,还是我坚持使用window.onload

2 个答案:

答案 0 :(得分:2)

您可以这样做:

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

答案 1 :(得分:0)

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

load()也适用于图片。你应该能够在不需要setTimeout的情况下做到正确。

http://api.jquery.com/load-event/包含一条通知,表明它无法可靠地用于图像。