-2

I have few line that listing to this script

$("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;
            });
        }
    });
});

but when i add new line via jQuery it doesn't work until refreshing the page

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

any idea how to fix it ?

Edit: Working code

$('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;
            });
        }
    });
});
4

5 回答 5

3

尝试:

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

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

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

于 2013-01-08T15:05:33.403 回答
1

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

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

于 2013-01-08T15:09:17.757 回答
0

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

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

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

因此,您可以更改为:

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

编辑

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

于 2013-01-08T15:09:56.910 回答
0

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

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

编辑: live 已被弃用,使用带有on的解决方案

于 2013-01-08T15:07:13.717 回答
-1

.live 已弃用,只需使用:

$(document).on('click', 'a.remove', function(){..});
于 2013-01-08T15:35:25.580 回答