5

我正在尝试将新元素添加到带有链接的有序列表中以将其删除:

$('#list ol').append('<li>' + label + ' <a href="#remove_'+id+'">[remove]</a></li>');

但这不起作用:

$('a[href^="#remove"]').on('click', function(event){
    alert('Removing: '+$(this).attr('href').substr(8));
    event.preventDefault();
});

知道为什么吗?

4

2 回答 2

8

将新元素包裹在 jQuery 标记中并在那时应用事件处理程序。与在元素已插入 DOM 后使用有些复杂的 jQuery 选择器来分配事件处理程序相比,这是一种更简洁、更有效的方法:

//this line will create your element in memory, but not insert it to the DOM
var newElmt = $('<li>' + label + ' <a href="#remove_'+id+'">[remove]</a></li>');

//you can apply jQuery style event handlers at this point
newElmt.on('click',function(e) {

    alert('Removing: '+$(this).attr('href').substr(8));
    event.preventDefault();
});

//insert the element as you were before
$('#list ol').append(newElmt);
于 2012-08-09T17:15:47.430 回答
0
$('#list').on('click', 'a[href^="#remove"]', function(event){
    alert('Removing: '+$(this).attr('href').substr(8));
    event.preventDefault();
});

由于您是li动态追加的,因此您需要使用.on()委托处理程序来处理委托事件。

于 2012-08-09T17:17:15.720 回答