【问题标题】:jQuery doesnt work after adding a jquery line [duplicate]添加jQuery行后jQuery不起作用[重复]
【发布时间】:2012-12-22 11:25:19
【问题描述】:

我有几行列出这个脚本

$("a.remove").click(function(){
    var id = $(this).attr('id')
    var user = $(this).attr('value')
    $.ajax({
        success : function(){
            var url = "includes/action.php?page=access&action=remove";
            var popupmessage = "Error";
            $.post(url, { id: id },
                function(data){
                    return true;
            });
        }
    });
});

但是当我通过 jQuery 添加新行时,它在刷新页面之前不起作用

$("<a class=\"remove\" href=\"#\"></a>").insertAfter('#accesstable tr:last');

知道怎么解决吗?

编辑: 工作代码

$('a.remove').live('click', function(){
    var id = $(this).attr('id')
    var user = $(this).attr('value')
    $.ajax({
        success : function(){
            var url = "includes/action.php?page=access&action=remove";
            var popupmessage = "Error";
            $.post(url, { id: id },
                function(data){
                    return true;
            });
        }
    });
});

【问题讨论】:

  • 什么不起作用?会发生什么?
  • 我不知道I have few line that listing to this scriptadd new line via jQuery 是什么意思,所以……是啊……
  • 您的选择器看起来很糟糕。改用$('a.remove').click(function(){})$('#' + rid).insertAfter('#accesstable tr:last')
  • 是的,我知道.. 这是旧的 שbandoned 代码。我会优化它,谢谢
  • **不要使用live,因为它已被弃用。我建议你看看@matt 的回答:stackoverflow.com/questions/14217865/…

标签: jquery reload


【解决方案1】:

jQuery 忽略动态添加的内容的监听器,使用 jQuery 的live

$("a[class='remove']").live('click', function(){});

编辑: live 已弃用,请使用 on

的解决方案

【讨论】:

  • .live 已被弃用。请参阅下面的评论。
  • 是的,它现在可以工作了,谢谢。
  • 我真的不知道它已被弃用......我想我使用 jQuery 的方式来长而不重读。
  • .live 已弃用,有利于使用.on 进行委派,请改用@matt 的答案。
【解决方案2】:

.live 已弃用,只需使用:

$(document).on('click', 'a.remove', function(){..});

【讨论】:

    【解决方案3】:

    试试:

    $(document).on('click', 'a.remove', function(){
    

    委托事件的优点是它们可以处理来自以后添加到文档的后代元素的事件。通过选择在附加委托事件处理程序时保证存在的元素,您可以使用委托事件来避免频繁附加和删除事件处理程序的需要。

    http://api.jquery.com/on/#direct-and-delegated-events

    【讨论】:

    • 它不起作用.. 但是当我将 .on 更改为 .live 时它工作正常
    【解决方案4】:

    如果您的意思是您新添加的锚标记没有调用您已经声明的相同点击事件,那是因为您使用的是.click() 函数。这只会将点击事件添加到页面中当前的匹配元素。

    您应该考虑使用live() 事件,因为这将

    为所有匹配当前元素的元素附加一个事件处理程序 选择器,现在和将来。

    所以你可以改为:

    $("a.remove").live('click', function(){ .. });
    

    编辑

    Live() 已弃用,您现在应该使用 on() 函数。

    【讨论】:

    • 是的,成功了,谢谢
    【解决方案5】:

    猜测(因为没有足够的代码可以确定),您的问题是您正在绑定点击,然后添加一个应该由该点击处理程序绑定的元素。它不是那样工作的。如果您使用.click 绑定,它将绑定当时存在的所有匹配元素。它不会自动绑定新创建的元素。

    要绑定尚未创建的元素,请在带有选择器的父元素上使用.on

    【讨论】:

    • 好的,很高兴知道。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多