2012-01-23 44 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