0

我正在动态创建一些标签。然后我试图将点击事件与他们联系起来。但这些事件并没有触发。

这是我的代码:

$(function() {
    onUploadReady();
});

var onUploadReady = function() {
    $('a[name=add]').on('click', function(event){
        event.stopPropagation();
        $('table#multiUpload').append('<tr><td style=\"text-align: center;\"><input type=\"file\" name=\"file\"/></td><td><a href="#" name="remove">Remove</a></td></tr>');
        return false;
    });

    $('a[name=remove]').on('click', function(event){
       event.stopPropagation();
       $(this).parents('tr').eq(0).remove(); 
       return false;
    });
}

如果我这样做$('a[name=remove]').live('click', function(event)而不是$('a[name=remove]').on('click', function(event),则事件正在触发。我在某处读到live不鼓励使用 of,我们应该使用on. 如果我们使用live. 那么我该如何解决这个问题呢?

js小提琴

4

2 回答 2

3

这样做:

$("parent_selector").on('click', 'a[name=remove]', function(e){
   //do something
})

如果parent_selector不知道,请document改用。

在您的示例中,您可以编写:

$("table#multiUpload").on('click', 'a[name=remove]', function(e){
   //do something
})

您使用的语法就像bind. 对于动态添加的元素,您应该使用上述语法。在此我们将处理程序附加到已经存在的父级,而不是新添加的元素。因此它将适用于将来添加的所有元素。

于 2013-01-10T06:44:55.727 回答
2

采用:

$(document).on('click', 'a[name=remove]', function(e){
...
});
于 2013-01-10T06:47:17.320 回答