1

ajax データ読み込み呼び出しの成功時にコンテンツを取得する DIV があります。

  $.ajax({
    type: 'POST',
    url: '/load.php',
    success: function(msg) { 
            document.getElementById('DIV').innerHTML = msg;
    ...

新しく読み込まれたコンテンツ内には、オブジェクトがあります。したがって、ページが最初にロードされたときにこれらのオブジェクトをインスタンス化することはできません。それらはまだ存在していないためです。したがって、ajax の成功時にそれらをインスタンス化します。

  $.ajax({
    type: 'POST',
    url: '/load.php',
    success: function(msg) { 
            document.getElementById('DIV').innerHTML = msg;
            $("#button").button();
            $("#dp").datepicker();
            etc.
    }

これはうまくいきます。しかし、これが良い習慣であるかどうかは疑問です。まず第一に、ユーザーが関数をトリガーして DIV をロードするたびに、そのすべてのコンテンツをブラウザーのオブジェクト モデルに何度も追加する必要があると思います。同様に、これらの jQuery インスタンス化呼び出しはすべて、何度も実行する必要があります。

これがベスト プラクティスかどうか、コンテンツを DIV に読み込むためのより良い方法があれば教えてください。

ありがとう。

4

2 に答える 2

0

コンセプトは素晴らしいですが、よりクリーンな方法があります。1 つには、成功を 1 つの関数に統合し、.ajax ブロックから分割するだけで、既存のコードをクリーンアップできます。

あなたが本当に探しているのは、最近 jQuery 1.8 で更新された.ajaxComplete()だと思います。いずれかの ajax リクエストが完了すると起動しますが、どの ajax リクエストがどのコードを .ajaxComplete 内で起動するかを区別するために使用できるデータを渡すことができます。ドキュメントから引用された「リクエストの作成に使用されたイベント オブジェクト、XMLHttpRequest オブジェクト、および設定オブジェクト」はすべて .ajaxComplete ハンドラーに渡すことができます。

このメソッドを使用する例 (ドキュメントからも):

$(document).ajaxComplete(function(event, xhr, settings) {
    if ( settings.url === "ajax/test.html" ) {
        $( ".log" ).text( "Triggered ajaxComplete handler. The result is " +
            xhr.responseHTML );
    }
});

もう 1 つのオプションは、遅延オブジェクトを明示的に使用することです。常にチェックアウトし、完了し、特に失敗します。ドキュメントはこちら。

于 2013-05-14T00:04:59.270 に答える
0

これは、特定のウィジェット ライブラリがより良いものを提供しない限り、動的に追加された要素でウィジェットをインスタンス化する唯一の方法です。イベント ハンドラーは、委譲を使用して早期にバインドできますが.on()、ウィジェットは通常、インスタンス化時に要素へのアクセスを必要とします (初期化の一部として DOM を変更することがよくあります)。

于 2013-05-13T23:44:42.473 に答える