jquery委托不使用列表项

时间:2011-12-31 02:56:06

标签: jquery

我正在使用旧版本的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)

我错过了什么?

1 个答案:

答案 0 :(得分:4)

.delegate()的关键是你无法销毁/替换jQuery对象中的项(在本例中为.image_result。这样做会杀死你的jQuery事件处理程序。你在jQuery中使用的选择器对象必须是静态的(不会被破坏或替换)。

在您的情况下,假设.image_result#imageTable的孩子,您可以改为使用此代码:

$("#imageTable").delegate(".image_result li", "click", function() {...});

因为#imageTable没有被替换,所以它的事件处理程序在子对象的更改中存活,并且作为参数传递给.delegate()的选择器在右li个对象上归零。