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

而不是使用.click(),您需要使用.on()(jQ 1.7 及更高版本)作为侦听器委托给祖先元素。绑定一次,然后任何' 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 回答