2011-12-11 5 views
4

これは私が推測するのが難しいです、そして、私は本当に私の問題を解決してはいけないので、私は '解決策'が嫌いです。なぜ、console.logの変数を参照すると、ロードバグが修正されたのですか?

私は時間の40%が完全には追いつかない機能を持っています。最初は、それがimgとiframeの要素をオンザフライで操作していると思っていましたが、私はキャッシュと読み込みを並べ替えるためにさまざまなことをしました。

特に、newCover変数で実行していたことは、その60%しか実行されませんでした。私の不満の中で私はコンソールのログをnewCoverの最後に記録して、なぜ時々表示されないのかを理解しようとしました。

しかし、奇妙なことに、私は変数をログに記録しているので、関数を使って100%成功率を得ることができます。

それはなぜです!あなたはそれがここに第三のポストに取り組んで見ることができます

:推測のちょうどビット

albumCover = function(){ 
$(".forPhotoset").each(function() { 
    var forPhotoset = $(this); 
    var myFrame = forPhotoset.find("iframe"); 
    myFrame.hide(); 
    myFrame.load(function(){ 
     var newCover = myFrame.contents().find('.photoset').children(':first-child').children(':first-child'); 
     newCover.children(':first-child').remove(); 
     var psPre = newCover.attr("href")+ '?' + (Math.random() * 1); 
     newCover.append("<img src='"+ psPre +"' alt='Cover Page' />"); 
     var psHeight = newCover.find('img'); 
     psHeight.load(function(){ 
      if (psHeight.height()>heightRef){ 
       psHeight.height(heightRef); 
      } 
     }) 
     newCover.detach(); 
     forPhotoset.append(newCover); //only executes 60% of the time 
     console.log(newCover);//i added this, now i get 100% success rate?! 
    }) 
}); 
} 
+0

実際に私自身の理論を追加します。ページがロードされると、DOM、jQueryなどの点で多くのことが起こります。変数を2回参照すると、スクリプトはその変数にさらに注意する必要がありますか?しかし、それはそのようなハックのように思えます。 – RGBK

+0

'.load()'コールバックのすべてが時間の60%を実行するか、 'forPhotoset.append(newCover);という行だけを実行していますか? –

+3

'newCover.detach();の代わりに' newCover.appendTo(forPhotoset) 'を使ってみてください。 forPhotoset.append(newCover); ' –

答えて

0

が、それはにconsole.logの呼び出しが鈍化していることが考えられます。ここではhttp://syndex.me

はコードがありますスクリプトのタイミングがわずかに変わり、他のDOMの変更が完了するまでの時間が長くなります。おそらく、setTimeout()で呼び出しをラップして、console.log呼び出しと同じ効果があるかどうかを確認してください。

関連する問題