2011-09-10 12 views
2

jqueryコードに問題があります。 私のHTMLページに私はajaxを使って情報を取得してから、 を$("#id").html(...)に変更しています。ページのロードが完了したら、どのように関数を呼び出すことができますか? (そしてそれだけです)

問題は、私はまた、私は、ページがロード行われますが、$("#id").html(...) とHTMLの各変化の後にコードが再び呼び出されたときに一度だけ を呼び出したい$(document).readyコードを持っている、です。

$(document).readyコードを実行するにはどうすればよいですか?ここで

は一例です:

$(document).ready(function(){ 
    // this code will run not only once... 
} 

function f(){ 
    $("#id").html(...); 
} 
+1

は "ロード完了" を定義します。すべてのコンテンツ? DOM?何?あなたの2番目の要件は同じですか?リンクされていますか?独特な? –

答えて

1

the .ready documentation上のコメント:

(.readyのように見える)ページが最初に DOMを解決したが、どうやらも後にするときだけでなく、発射DOMへの変更。これは、 レディハンドラがDOMを変更した場合の問題です。これにより、準備完了()が1回以上発生します の各呼び出しがDOMにまだ追加されていれば、無限ループが発生する可能性があります。 FirefoxとIEの動作はこれとは異なり、 には異なるエラーメッセージが含まれており、ページの表示は の状態に変わりません。したがって、ready()がDOMを変更した場合は、readyがすでに起動されているかどうかを確認する方法があることが賢明です( )。まあ、 (つまりaparently可能であるが)問題の一部が再びその レディ機能の火災ではありません表示されますが、DOMを変更すると、準備 関数を作成し、そのスクリプトを引き起こすこと:

自己への返信もう一度起動すると、追加の準備関数などが追加されます。 これは、 ハンドラが変更するDOM部分を超えて(または含まれている)、 という点でjavascriptがHTMLに埋め込まれている場合に発生します。 (明らかに、 がドキュメントヘッドに準備関数を作成しているが、この場合は、 はオプションではない)。 (...)。

これはあなたの問題かもしれない場合は、同じソリューションを採用することができます、

var onLoadFired = false; 
$(document).ready(function() { 

    /* Ensure this function only runs once */ 
    if (onLoadFired) { 
     return; 
    } 
    else { 
     onLoadFired = true; 
    } 

    /* Business logic */ 

    // .. your code here .. 
}); 

または、より良いあなたのページのhead要素にscriptタグが含まれています別のスクリプトファイルにあなたのハンドラを動かします。

2

試してみてください。

var run = false; 
$(document).ready(function() { 
    if(!run) { 
     ... 
     run = true; 
    } 
}); 
...か...

$(window).load(function() { 
    ... 
}); 

最初のものは、それが一度だけ実行されていることを確認します。 2ページ目はページ全体の読み込みが完了したときに実行されます(画像の読み込みが完了したらサイズ変更が必要な場合に便利です)。

0

これを試してみてください:

$(window).bind("load", function() { 
    ... 
});