2012-01-23 41 views
4

我有一个页面上的PHP将输出一个相当大的股利,其中有很多组件。处理该div的JS几乎立即开始,但是存在与加载bigDiv和处理它的脚本相关的时间问题。jQuery.ready()函数等待多久?

所以,我申请这样的代码来处理它准备好()

var bigDiv = $(document).find('#bigDiv'); 
bigDiv.ready(function{ 
    //some code here 
}); 

现在的问题是,如果bigDiv需要很长的时间才能出现,多久ready()功能等待?如果bigDiv完全不显示呢?

因此,为了避免剧本等着吧,我申请了一个暂停,

因此我选择了这样的另一种方法:

var waitTimer = 0; 
var lodTmout = 2000; 
function chkDataLod(){ 
    var bigDiv = $pH(document).find('#bigDiv'); 
    if(bigDiv.length > 0){//find if bigDiv has content 
     bigDiv.ready(function(){//wait for bigDiv to load it's contents completely 
      //some code here 
     }); 

    }else{ 
     //chk for bigDiv after every 500 msec for 2000 msec 
     if(waitTimer === lodTmout){ 
      return false; 
     }else{ 
      waitTimer += 500; 
      setTimeout('chkDataLod();',500); 
     }  
    } 
}; 

function _init(){ 
    chkDataLod(); 
} 

_init(); 

起初我想看看是否bigDiv的内容长度大于零。显示“未完成加载”的bigDiv时出现问题。所以我再次添加了.ready()函数。我在bigDiv上有一些动画函数,我不想在它完全加载之前启动它。

这个bigDiv从CDN加载,所以加载时序是变化的。有一天它花了差不多5秒的时间来加载。看到我自己的方法我知道它有问题。我正在使用setTimeout并准备好,都是。但我不确定凌如何等待。我试图看到它的文档,但无法清楚地找到它。

我该如何解决这个问题?

+0

这个div通过ajax加载?我不清楚你为什么不使用jquery document.ready来处理这个问题。 – kinakuta

+0

“$(document).ready(function(){});”可能会在所有页面控件创建完毕后开始。但是如果你正在谈论浏览器渲染它的另一个故事。 –

+0

@kinakuta - 我无法使用document.ready(),因为我想在加载IT时立即显示bigDiv。我不能等待整个页面加载,因为它可能需要太多时间。 – Shades88

回答

0

这取决于客户端网络的速度有多快,bigDiv中的内容有多大以及客户端计算机的速度有多快。

+0

这意味着什么?我知道客户端网络速度可能会很慢,这就是为什么我问过这个问题。 – Shades88

1

最简单的方法是在元素的结束标记后面运行代码。 像这样

<div id='bigDiv>....</div> 
<script> 
// do whatever you want to do with div 
</script> 

PS:或者,你可以尝试用一些间隔股利后访问的任何元素。如果它存在 - 你的div已经准备好了。

+0

我打算说同样的事情,并补充说如果$('#bigDiv')已经返回一个非空集合,那么你不太可能需要等待ready()。您需要准备好()的唯一时间是确保$('#bigDiv')成功,并且最好重新排列页面,以便脚本低于元素(或低于标记,理想情况下) – Jason

+0

此解决方案当前不在我的问题范围之内。无论我必须用bigDiv做什么,都需要包含在我所附带的js文件中。所以有两件事发生,它们可能异步发生。 1.加载bigDiv数据2.加载js来处理big div数据。现在,我所包含的这个js不仅与bigDiv相关,还具有其他功能。我清楚了,因为你可能会怀疑我为什么要分开放置js。 – Shades88

+0

@ Shades88你不清楚你的问题是什么。在浏览器获得div的结束标记之前,jQuery将返回空选择,因为元素不在DOM结构中。所以你需要的是定期检查所需元素的可用性。即使没有现成的功能。 – Cheery

0

尝试在script标签的第一行添加

var d = new Date(); console.log(d.getTime()); 

添加同样的事情jQuery的功能齐全后见

康普艾这次网页的加载时间

,你会诺蒂奇那ASA的最后一个图像加载它运行非常接近的毫秒

+0

这意味着,如果我的内容从未加载过,我的页面将会挂起,因为准备好连续检查它? – Shades88

+0

如果你的内容永远不会加载,那么即使你的jQuery永远不会加载 我还没有看到我的内容din't加载和我的CSS和JavaScript文件加载 – mikul

+0

不,不,我的JS分开和div内容分开。如果我的div内容不来,那么我的js和css就不会来了。 – Shades88