我正在使用旧版本的jquery(1.6.2),似乎无法让委托工作。我有一个列表,我试图在点击事件上使用委托,但在重新加载列表后它失败。
这是我目前的代码:
$(".image_result").delegate("li", "click", function() {
//$('.image_result li').click(function() {
var imgInfo = $(this).attr('id').split(':');
if(confirm('Are you sure you want to delete this image?')) {
$.post('delete_image.php?image_id=' + imgInfo[0] + '&user_id=' + imgInfo[1], function(data) {
if (data.st) {
var resp = data.html.split("|");
$('#imageStats').html(resp[0]);
$('#imageTable').html(resp[1]);
}
else {
alert("Yikes, something went wrong");
}
}, "json");
}
});
imageTable div现在保存新的列表项(image_result)
我错过了什么?
答案 0 :(得分:4)
.delegate()
的关键是你无法销毁/替换jQuery对象中的项(在本例中为.image_result
。这样做会杀死你的jQuery事件处理程序。你在jQuery中使用的选择器对象必须是静态的(不会被破坏或替换)。
在您的情况下,假设.image_result
是#imageTable
的孩子,您可以改为使用此代码:
$("#imageTable").delegate(".image_result li", "click", function() {...});
因为#imageTable
没有被替换,所以它的事件处理程序在子对象的更改中存活,并且作为参数传递给.delegate()
的选择器在右li
个对象上归零。