我有一个具有以下结构的表格
- table#Main
- tbody
- tr.Row
- td
- input.EditRow
我的jquery看起来像这样:
$("table#Main > tbody > tr.Row").live("click", function (e) {
RowClick($(this));
});
$(".EditRow").live("click", function (e) {
EditRow($(this));
});
我的问题是,如果我单击.EditRow按钮并调用EditRow函数,则会立即调用RowClick函数.
在对网站进行一些研究之后,我看到其他人通过使用以下任何一个命令解决了这个问题.
e.preventDefault();
e.stopPropagation();
我尝试了两种功能,不同的组合,但无法弄明白.有人能告诉我我做错了什么吗?
谢谢! < 3
解决方法:
更新:正如@patrick在他的评论中演示的那样,event.stopPropagation()应该可以在jQuery 1.4.3上运行.
对于jQuery 1.4.2及更低版本:
问题是由于.live()
,两个事件处理程序都绑定到DOM树的根目录:
The handler passed to
.live()
is never bound to an element; instead,.live()
binds a special handler to the root of the DOM tree.
所以event.stopPropagation
不再有效(两个事件处理程序都是同一级别):
Since the
.live()
method handles events once they have propagated to the top of the document, it is not possible to stop propagation of live events.
改为使用event.stopImmediatePropagation
并反转绑定事件处理程序的顺序(否则它将无法工作,因为事件处理程序按它们绑定的顺序调用):
$(".EditRow").live("click", function (e) {
e.stopImmediatePropagation();
EditRow($(this));
});
$("table#Main > tbody > tr.Row").live("click", function (e) {
RowClick($(this));
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。