2013-04-11 78 views
0

所以我有这个元素,我需要得到width()height(),但它一直返回0,但是当我在控制台中输入$('#lightingData').width()时,它给了我正确的值。我想我需要使用一些其他包装功能,我试过$(document).ready(function() {...});$(window).load(function(){...});jQuery等待更长的时间,直到函数被调用

是否还有其他的包装功能,它会等待更长的时间才能执行?

+0

对于静态元素,窗口加载应该足够绰绰有余。你用javascript添加元素吗? – 2013-04-11 17:49:03

+0

你可以发布一个完整的例子和jsFiddle吗? – j08691 2013-04-11 17:49:14

+0

向我们显示您的代码 – 2013-04-11 17:49:44

回答

2

如果#lightningData元素具有display:noneonload被触发,你的代码执行,widht()height()将返回0,您可以显式调用元素.show()的尺寸检查

$('#lightingData').show().width(); 
+0

这只有在实际上在加载的时候这个元素被称为 – 2013-04-11 17:52:26

+0

是有用的。这是一个给定的。没有任何东西的宽度不能大于0. – TheBrain 2013-04-11 17:53:18

+0

你也可以在最后立即调用'.hide()'来将元素恢复到以前的状态。 – Ian 2013-04-11 17:58:47

2

的事情之一,前您可以尝试在尝试呼叫.width().height()之前明确等待该特定元素加载。

试试这个:

$('#lightingData').load(function() { 
    ...height and width manipulation here... 
    ...don't forget about scope... 
}); 

你应该把你这里面$(document).ready(...),你会希望文档至少知道什么是$('#lightingData')。因为你得到0heightwidth而不是错误,我可以假设它们至少在调用方法之前找到。


UPDATE

每通过@Ian添加的评论,我想指出的是,这只能对某些类型的元素(URL,内部框架,图片/媒体等的工作 - 基本上什么需要加载其内容)。我不打算更新代码,因为如果您将它用于其中一种元素,我上面的内容是正确的,如果您将它用于另一种元素,将会很愚蠢。如果你正在使用它,你只需要添加一个条件/过滤器(根据你的实现),以确定这个代码是否应该绑定到该特定元素。

+0

为什么你在另一个包装jQuery对象? – Ian 2013-04-11 17:57:41

+0

@Ian - 哈哈,这是一个错误,谢谢!我想最初我会打字选择器,但后来发现我的感觉,并与复制意大利面。粉笔另一个出于原因要小心复制粘贴! – 2013-04-11 18:01:01

+0

另外,检查'$(window).on(“load”,function(){});'的内部应该绰绰有余,因为所有图像都会加载 - 那么您不需要'load'事件的形象。问题更可能是该元素被隐藏,无法计算宽度/高度。 – Ian 2013-04-11 18:01:12

0

如果你是100%肯定的宽度仍然是0在$(文件)点。就绪()

试试这个:

$(function() { 
    $('#lightingData').show(function(e) { 
     var width = $(this).width(); 
     //do something 
    }); 
}); 

或者,一些愚蠢的事,但会为工作90%的情况下:

$(function() { 
    setInterval(function() { 
     var width = $('#lightingData').width(); 
     //do something 
    }, 1000); 
}); 

这一个将后$(文件)。就绪延迟动作1秒()。

没有确切的情况很难给出指定的解决方案。