jQuery等待更长时间,直到调用函数

时间:2013-04-11 17:47:26

标签: javascript jquery

所以我有了这个元素,我需要获得width()height(),但它会一直返回0,但是当我在控制台中输入$('#lightingData').width()时,它会给出我是正确的价值观。我想我需要使用其他一些包装函数,我尝试过$(document).ready(function() {...});$(window).load(function(){...});

还有其他包装函数会在执行之前等待更长时间吗?

3 个答案:

答案 0 :(得分:2)

如果#lightningData元素在display:none被触发并且您的代码已执行时onload widht(),则height().show()将返回0.您可以显式调用检查尺寸

之前,元素上的 $('#lightingData').show().width();
{{1}}

答案 1 :(得分:2)

您可以尝试的其中一件事是在尝试调用.width().height()之前明确等待加载该特定元素。

试试这个:

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

您应该将其放在$(document).ready(...)内,因为您希望文档至少知道$('#lightingData')是什么。因为0height获得width而不是错误,所以我可以假设在调用方法之前至少找到它们。


更新

根据@Ian添加的评论,我想指出这只适用于某些类型的元素(URL,IFrame,图像/媒体等 - 基本上任何需要加载其内容的东西)。我不打算更新代码,因为如果你将它用于其中一种元素,我上面的代码是正确的,如果你将它用于另一种元素,那将是愚蠢的。如果您同时使用它,则只需添加条件/过滤器(基于您的实现)以确定此代码是否应绑定到该特定元素。

答案 2 :(得分:0)

如果您100%确定$(文件).ready()

点的宽度仍为0

试试这个:

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

或者,有些愚蠢,但对90%的情况都有效:

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

这个将在$(文件).ready()。

之后将动作延迟1秒

如果没有确切的方案,很难给出指定的解决方案。