如何覆盖行的点击次数?

时间:2012-09-26 16:21:46

标签: jquery preventdefault

我有一个表,每一行都分配了一个唯一的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仅适用于表单操作,因此在此实例中不起作用。如何覆盖默认的行单击操作?

谢谢!

2 个答案:

答案 0 :(得分:2)

而不是e.preventDefault(),请使用e.stopPropagation()。容易。

编辑:现在我没有用我的手机回答,我想我还会多补充一点。停止传播可能会产生不希望的影响。例如,如果要将事件添加到$(window).click(),该怎么办?停止传播后,如果用户单击x,则不会触发此事件。 IMO更好的方法是这样的想法:

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

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

答案 1 :(得分:1)

您希望阻止其他事件处理程序发生,因此您需要event.stopImmediatePropagation()event.stopPropagation()

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

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