2

私はjqueryを初めて使用し、これが単純な問題であることを望んでいますが、アイデアが不足しています。

私は.netを使用していて、ユーザーをフォローするための以下のようなカスタムjquery関数をいくつか含むページがあります。これは、ページが最初に読み込まれるときに完全に正常に機能します。

この問題は、別のページに投稿して結果を追加する無限スクロールに伴うものです。その投稿されたページに以下の関数を再度含めずに結果を追加すると、新しく追加されたリンクをクリックしたときにイベントが発生することはありません。しかし、これとまったく同じスニペットを再度含めると、正しく機能します。ページ上の以前のすべてのリンクが余分な時間を起動することを除いて。

したがって、5ページのデータを下にスクロールして、ページの最初のリンクをクリックすると、6回起動するようになりました。私が追加した最新のものは一度だけ発砲します。

デバウンスとスロットリングについていくつかのことがわかりますが、これはそれよりもさらに単純なようです-この関数を一度だけロードして、追加されたデータに対して機能させる方法はありませんか?

$(document).ready(function () {

   $('a.FollowJQ').click(function () {

     var username = $(this).attr('data');

     $.post('/jquery/follow.aspx',{ user: username },

       function (data) {

          if (!data.error) {

           if (data.server == 'SendToLoginPage') { window.location = "/login.aspx" }

              else { $('a.FollowJQ:[data=' + username + ']').html(data.server); }  }

                    else { $('a.FollowJQ:[data=' + username + ']').html(data.server); }

                        }, 'json');
                });
        });
4

1 に答える 1

1

を使用する代わりに、(jQ 1.7以降)を使用して、リスナーとして祖先要素に委任する.click()必要があります。.on()一度バインドすると、任意の' a.FollowJQ'が関数を実行できます。

$('#wrapper').on("click", "a.FollowJQ", function() { ..the function.. });

jQuery 1.6.xを使用している場合、.delegate()は同じことを行います。

$('#wrapper').delegate("a.FollowJQ", "click", function() { ..the function.. });

サンプルでは、​​他のDOM操作によって破壊されることが予想されない要素"#wrapper"の祖先要素です。"a.FollowJQ"最も近い共通の祖先が最高のパフォーマンスを発揮します。

于 2011-11-09T05:23:44.333 に答える