2016-12-09 20 views
0

私のWebページでは、要素がいつ読み込まれるかを確認するためにJavaScriptを使用しています。私はこの要素を強制的に読み込んでいますが、スクリプトは正しく動作していないようです。ここで長いJavaScriptのためにページが読み込まれない

は、だから私は要素が存在するようになるまでループして100ミリ秒に各反復を待っている、私がやっている

var exists = false; 
while(!exists) 
{ 
    setTimeout(function() { }, 100); 
    if ($('#reject-grid').length) { 
     var exists = true; 
     $("#loading").fadeOut(); 
     $("#wrapper").removeClass("hidden"); 
    } 
} 

です。それから私はローディングスクリーンをコントロールする私のスピナーを本質的に止める仕事をしています。

+1

'のsetTimeout()'一度だけ火を。 'setInterval()'でそれを変更し、その中に実際の関数をラップします。 – Roberrrt

+4

setTimeout(function(){}、100)は待機しません.100msで実行する(空の)関数をスケジュールするだけです。 –

答えて

3

これを100msごとに繰り返すことを考えていますが、実際に何をしているかは、空のタイムアウトハンドルを多数作成してこのコードを繰り返し実行することです。

あなたは何かしたい:

function checkRejectGrid() { 
    if ($('#reject-grid').length) { 
    $("#loading").fadeOut(); 
    $("#wrapper").removeClass("hidden"); 
    } else { 
    setTimeout(checkRejectGrid, 100); 
    } 
} 

checkRejectGrid(); 
+0

これはかなり滑らかなようです。私があなたの答えを理解していることを知るために、checkRejectGridは、#reject-gridに気づくまで継続して呼び出されます。それから私たちは論理を終えて出る? – Jared

+0

これは1回と呼ばれ、 'reject-grid'がまだ存在しない場合、100msタイマーは再度呼び出されるように設定されています。それは再帰的ではなく、連続的ではありません。タイマーだけでなく、新しいタイマーで、次に新しいタイマーで、最終的にグリッドが見つかるまで別のタイマーには到達しません。 –

関連する問題