首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在AJAX调用后单击jQuery绑定到链接

在AJAX调用后单击jQuery绑定到链接
EN

Stack Overflow用户
提问于 2011-01-30 17:18:23
回答 2查看 53.5K关注 0票数 19

我越来越生气了--也许有人能帮我解决这个问题。

我需要在AJAX调用后将点击重新绑定到链接,但由于某些原因,它不想工作。

下面是我的代码:

代码语言:javascript
复制
if ($('.active').length > 0) {
    $('.active').click(function() {
        var elem = $(this);
        var url = $(this).attr('href');
        $.ajax({
            url: url,
            dataType: 'html',
            success: function(data) {
                elem.replaceWith(data);                                                     
            }       
        });         
        $('.active').bind('click'); return false;           
    });
}

有什么想法吗?

感谢你的回复-我已经修改了代码,但问题仍然存在:

代码语言:javascript
复制
function makeActive() {
    if ($('.active').length > 0) {
        $('.active').click(function() {
            var elem = $(this);
            var url = $(this).attr('href');
            $.ajax({
                url: url,
                dataType: 'html',
                success: function(data) {
                    elem.replaceWith(data);                             
                }       
            }); 
            $('.active').live('click', makeActive);     
            return false;           
        });
    }
}


$('.active').live('click', makeActive);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-30 17:28:22

如果想要在Ajax调用之后执行重绑定,则必须在success处理程序中添加重绑定:

代码语言:javascript
复制
success: function(data) {
    elem.replaceWith(data);
    $('.active').bind('click', /* some function needs to go here*/);
}

也就是说,在这种情况下,live()delegate()可能是更好的 now that jQuery 1.7 is out, everything can be done with [.on()]选项。这还可以防止双重分配单击处理程序,以防您有其他尚未替换的.active链接。

更新:关于您更新的代码的:您使用live的方式违背了它的目的。请阅读它的documentation。您所做的是在单击链接时分配一个单击处理程序,这意味着您将一次又一次地添加单击处理程序。

这是您的代码的改进版本。

代码语言:javascript
复制
$('.active').live('click', function(event) {
    var elem = $(this);
    var url = $(this).attr('href');
     $.ajax({
         url: url,
         dataType: 'html',
         success: function(data) {
              elem.replaceWith(data);                             
         }       
     });    
     event.preventDefault();
     event.stopPropagation();
});
票数 21
EN

Stack Overflow用户

发布于 2011-01-30 17:21:51

2012年10月31日更新

从jQuery 1.7开始,建议使用on -

代码语言:javascript
复制
$(document).on('click', '.active', function () {
    // click handler code goes here
});

你能试试下面的方法吗?

代码语言:javascript
复制
$('.active').live('click', function()
{
    // click handler
});
票数 32
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4842119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档