1

プレースホルダー(通常のdiv)を含むWebページがあります。ajax呼び出しを介して、プレースホルダーにa<form>とaをロードしています。<script>スクリプトには、フォームを初期化するために必要なjavascriptが含まれています(たとえば、フォームを読み取り専用にするためにコントロールを無効にするなど)。これが私が持っているコードの一部です。動作しますが、コメント部分は動作しません。スクリプトエンジンは、ajaxを介して呼び出すスクリプトの1つにある関数であるオブジェクトtristate_DisableControlを見つけることができないためです。

$(document).ready(function() {

    //    $('#site_preferences_content div').each(function() {
    //        if (typeof (window.tristate_DisableControl) == 'undefined') {

    //            if (typeof (window.console) != 'undefnied')
    //                console.log((new Date()).toTimeString() + ' not logable');

    //            pausecomp(1000);

    //        }
    //        else
    //            tristate_DisableControl(this);
    //    }); //end $('#site_prefrences_content div').each()

    setTimeout(function() {
        $('#site_preferences_content div').each(function() { tristate_DisableControl(this); })
    }, 1000);

});  

$(document).ready()が実行されるまでに、DOMが適切にロードされると思いました...

4

3 に答える 3

1

このreadyイベントは、ページの読み込みが完了すると発生します。非同期AJAX呼び出しが完了するのを待ちません。

追加のコンテンツが読み込まれた後にコードを実行するには、loadメソッドのコールバックを使用します。例:

$('#site_preferences_content').load('content.html', function() {
  $('#site_preferences_content div').each(function() {
    tristate_DisableControl(this);
  }
});
于 2010-06-02T11:23:58.727 に答える
0

ドキュメントの準備完了イベントは、ドキュメント全体が読み込まれたときに発生します。これは、ajaxを使用して読み込まれたスクリプトを除外します。そうでない場合、スクリプトがajax呼び出しを続けていると、準備完了イベントは発生しない可能性があります。

このためには、ajaxロードメソッドでコールバックを使用する必要があります。

于 2010-06-02T11:15:16.270 に答える
0

あなたの質問を正しく理解したかどうかはわかりませんが、の宣言がtristate_DisableControlAJAX呼び出しによって返される場合、いいえ、DOMReadyすべてのAJAX呼び出しが実行されるまで待機しません(結局のところ、AJAX呼び出しの数を知るにはどうすればよいでしょうか)できるでしょう?)

AJAX関数のsuccess/コールバックを使用して、ロードがいつ終了したかを確認する必要があります。complete

于 2010-06-02T11:13:19.847 に答える