2

Web ページに一覧表示される項目のリストを返すリモート Web サービスへの呼び出しがあり、1 分後に新しいリストが送信され、古いリストを取得して、どの項目が新しいかを調べてから変更する必要があります。リスト。

プロセスのステップ 2 は、現在リストされているすべての項目のリストを生成することですが、それらは AJAX 経由で読み込まれるため、単純な $('#items').each(); を実行できません。「on」機能を使用する必要があります。

on 関数はイベントを使用します。うまくいかないようです/それを "on" にする方法を見つけることができません... リクエスト? 私がやっている現在の方法はばかげているようです:

$.ajax({
    url: url,
    success: function(data) {
        $('#items .item').on("click", function() {
            console.log("an item");
        });

        $('#items .item').trigger("click");
    }
});

「クリック」イベントを偽造して、「オン」に何かをリッスンするようにしていますが、これは奇妙に思えます。

クリックイベントを偽造せずにアイテムと対話するために「オン」を使用する適切な方法は何ですか?またはクリックイベントを偽造するのはそれを行う唯一の方法ですか?


明確にするために編集:

ステップ 1. Web ページが HTML で読み込まれます。

<div id="content">
    <div id="items">

    </div>
</div>

ステップ 2. 10 秒後に items.php に対して AJAX 呼び出しが行われ、アイテムの JSON 表現が返されます。次に、.each を使用して次のようにページに挿入します。

$.each(data, function(key, value) {
    $('#content').append('<div class="item">'+value.title+'</div>');
});

だから今のように見える

<div id="content">
    <div id="items">
        <div class="item">title</div>
        <div class="item">title</div>
    </div>
</div>

ステップ 3. 60 秒後、items.php に対して別の AJAX 呼び出しが再度行われ、新しいアイテムの JSON 表現で応答します。この時点で、現在リストされているアイテム (#items 内のすべての .item) をタイトルで取得し、新しいタイトルを比較する必要があります。

$('#items .item').each(function(){
    // doesn't work because the items aren't available 
});

私のグーグルは、「ライブ」を使用する必要があると教えてくれましたが、これは廃止され、代わりに「オン」が使用されています...

以前に読み込まれた要素をループする方法が必要です。


最終編集:

問題は存在しませんでした。divの名前をタイプミスしたようで、急いで、問題は以前に経験したことであると思いました:オン/ライブの必要性。以前のスタック オーバーフローに関する多くの質問では、HTML を挿入した Javascript を使用した live/on の必要性について議論されていましたが、それは特にユーザー インタラクションのためのもののようです。Javascript はロードされた項目と問題なくやり取りできますが、jquery は live/on なしではそれらの項目とのユーザーのやり取りに対応できません。

私の悪い。

4

2 に答える 2

0

以下の行を変更してみてください

    $('#items .item').on("click", function() {
        console.log("an item");
    });

   $(document).on("#items .item","click", function() {
        console.log("an item");
    });
于 2012-12-14T08:33:00.707 に答える
0

タイムアウト機能を設定してこれを起動できます:

これはfire the function after 3 seconds of wait

function myFunction(){
   $.ajax({
      url: url,
      success: function(data) {

           console.log(data);
      }
   });
}

setTimeout(function(){
    myFunction();
},3000);
于 2012-12-14T08:16:04.530 に答える