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