2013-04-02 37 views
0

我想在页面加载时设置一个select元素的大小,然后根据新的自动大小设置它的容器的大小。这有时会起作用,但似乎失败并且页面加载速度较慢。如果我调试代码并在每一行暂停,它会在100%的时间内运行,所以我假定在下一行发生之前每个操作都没有完成。我尝试为每行添加setTimeout,这有助于一点点,但不是所有时间。有任何解决这个问题的方法吗?jquery设置宽度,等待更新

$(document).ready(function() { 

    //set select element to auto width 
    setTimeout(function(){$("#PunchDD").width("auto");},5); 

    //Add some width to the element to account for custom drop down arrow 
    setTimeout(function(){$("#PunchDD").width($("#PunchDD").width() + 17);},5); 

    //Set container width a bit smaller to hide the stock drop down arrow 
    setTimeout(function(){$("#PunchDDContainer").width($("#PunchDD").width() - 18);},5); 
}); 

此外,我不想在CSS中设置自动大小,因为我使用固定大小的时候出现故障时,JavaScript不工作。

+2

你可以等待'load'事件而不是'ready'吗?不同之处在于'load'等待所有静态资源(这可能会影响页面布局),其中'ready'只是等待DOM准备好进行操作。 – jmar777

+0

当DOM被加载时,选择元素*** IS ***准备就绪,它不需要等待图像等静态资源。 – adeneo

+1

@adeneo正确,但他的问题是*布局*相关,它可能*不稳定,直到'load'事件。 – jmar777

回答

1

设置你的活动,在窗口工作负载的文件准备,而不是:

$(window).on('load',function(){ 
    // fun shtuffs 
}); 

这应该解决的问题,因为窗口和CSS格式已经加载的任何操作发生之前。

+0

这似乎工作,谢谢所有! – Thildemar