1

我有一个表,每一行都分配了一个唯一的 ID,因此我可以单击该行,用 jquery 抓取它并编辑该行的数据。为了方便起见,我喜欢单击整行,它使用户更容易..

在最后一列中,我有一个 X,我希望能够单击它来删除该行。同样,它有一个唯一的 ID,所以我可以识别每一行。我的 jquery 看起来像这样..

    $('.delrow').click(function(e) {
    e.preventDefault();
    var id = $(this).attr('id');
    id = id.substr(3);
    if (confirm('Are you sure you want to delete this row?')) {
        $.ajax({
            url: "/rowdelete/?delid="+id,
            success: function(data) 
            {
                location.href="/";
            }
        });
    } else {
        return false;
    }   

});

这应该删除该行然后返回主页。它所做的是删除该行,然后继续进入我的编辑模块,其行 ID 为 null,因为行单击的默认操作就是这样做的。我认为此时 preventDefault 仅适用于表单操作,因此在这种情况下不起作用。如何覆盖默认的行单击操作?

谢谢!

4

2 回答 2

2

而不是e.preventDefault(),使用e.stopPropagation(). 简单的。

编辑:现在我没有用手机接听电话,我想我会再补充一点。停止传播可能会进一步产生不良影响。例如,如果您想向 中添加事件$(window).click()怎么办?停止传播后,如果用户单击x. IMO 更好的方法是这样的:

$('.row').click(function (event) {
    if ($(event.target).hasClass('delrow')) {
        return false;
    }
    // edit row
});

然后你可以将你的事件添加到x元素中。如果您愿意,也可以将您的事件放在 if 语句中......这是一个偏好问题。

于 2012-09-26T16:25:48.267 回答
1

看起来您想阻止其他事件处理程序发生,所以您想要event.stopImmediatePropagation()event.stopPropagation()

http://api.jquery.com/event.stopImmediatePropagation/
http://api.jquery.com/event.stopPropagation/

此链接可能会澄清一点: event.preventDefault() vs. return false

于 2012-09-26T16:25:38.970 回答