我试图仅针对特定事件处理程序停止事件传播,同时允许同一事件上的其他人传播,这是一个示例:
function Control(parent) {
this.Parent = $(parent);
this.Parent.append('<div class="test"></div>');
this.Test = $('.test', this.Parent).last();
this.Test.bind('mousedown', this, Control_All);
this.Test.bind('mousedown', this, Control_Top);
}
function Control_All(event) {
//this should bubble up through both c1 and c2
}
function Control_Top(event) {
//this should stop at c2
}
Control.prototype.constructor = Control;
Control.prototype.All = Control_All;
Control.prototype.Top = Control_Top;
var c1 = new Control('body');
var c2 = new Control(c1.Test);
在上面的示例中,c1.Test 和 c2.Test 的大小相同。我正在尝试让 mousedown 事件调用这三个事件(我知道 OO 方法没有维护,状态是通过 event.data 保存的,但是为了简单起见,我使用 OO 表示法,在我的实际用例中全部和单个委托是绑定变量顺序,并且仅在某些情况下,因此无法控制它们绑定的顺序): c1.All c2.All c2.Single
我已经在 Control_Top 的末尾尝试了 event.preventDefault()、event.stopPropagation()、event.stopImmediatePropagation() 和 return(false),但是如上所述,没有任何工作要做。
编辑:这是一个 JSFiddle 链接,可以帮助任何有兴趣帮助它的人。
再次编辑:使用全局和额外绑定来解决 body.mousedown,如果有人需要它,将欢迎不使用全局或额外绑定的解决方案。