处理程序已存在且已绑定时,在.live()上执行JQuery StopRopagation
我知道现场电话是通过文档冒出来的,这就是我遇到问题的原因 不幸的是,我使用的是绑定元素的第三方库,并且希望创建一个案例,在这个案例中,单击事件不会冒泡到这些元素 将.click()与eventStopPropogation结合使用效果很好,但是由于内容的动态性,我需要使用live、on、delegate等。。。 这是我的问题。我需要防止单击“内部”分区时触发“外部”单击。我可以不更改“外部”处理程序 提前感谢您的帮助 HTML:处理程序已存在且已绑定时,在.live()上执行JQuery StopRopagation,jquery,event-bubbling,stoppropagation,Jquery,Event Bubbling,Stoppropagation,我知道现场电话是通过文档冒出来的,这就是我遇到问题的原因 不幸的是,我使用的是绑定元素的第三方库,并且希望创建一个案例,在这个案例中,单击事件不会冒泡到这些元素 将.click()与eventStopPropogation结合使用效果很好,但是由于内容的动态性,我需要使用live、on、delegate等。。。 这是我的问题。我需要防止单击“内部”分区时触发“外部”单击。我可以不更改“外部”处理程序 提前感谢您的帮助 HTML: 在绑定到外部的委托上使用,并在内部的单击处理程序中调用e.sto
在绑定到
外部的委托上使用,并在内部的单击处理程序中调用e.stopPropagation()
。这应该可以完成
试试这个
已更新
$("#outer").bind('click',function(e){
alert("outer clicked");
});
$('#outer').on('click',"#inner",function(e){
e.stopPropagation();
alert("inner clicked");
});
在绑定到外部的委托上使用,并在内部的单击处理程序中调用e.stopPropagation()
。这应该可以完成
试试这个
已更新
$("#outer").bind('click',function(e){
alert("outer clicked");
});
$('#outer').on('click',"#inner",function(e){
e.stopPropagation();
alert("inner clicked");
});
正如您已经指出的,事件委派取决于事件冒泡和静态元素的使用。这个问题很复杂,因为
和
元素之间没有任何关系,但我们可以绕过它
为设置动态事件处理程序在绑定到#outer
的内部元素上单击事件,然后调用事件.stopImmediatePropagation()
,以防止执行其他事件处理程序。缺点是这取决于绑定事件处理程序的顺序,因此必须先绑定#internal
的委托事件处理程序,然后再绑定#outer
的静态事件处理程序
$('#outer').on('click', '#inner', function(e) {
console.log('inner');
e.stopImmediatePropagation();
}).click(function(e) {
console.log('outer');
});
看看。正如您已经指出的,事件委派取决于事件冒泡和静态元素的使用。这个问题很复杂,因为
和
元素之间没有任何关系,但我们可以绕过它
为设置动态事件处理程序在绑定到#outer
的内部元素上单击事件,然后调用事件.stopImmediatePropagation()
,以防止执行其他事件处理程序。缺点是这取决于绑定事件处理程序的顺序,因此必须先绑定#internal
的委托事件处理程序,然后再绑定#outer
的静态事件处理程序
$('#outer').on('click', '#inner', function(e) {
console.log('inner');
e.stopImmediatePropagation();
}).click(function(e) {
console.log('outer');
});
看看。你可以使用
$("#outer").bind('click',function(e){
alert("outer clicked");
});
$('#outer').on('click',"#inner",function(e){
e.stopImmediatePropagation();
alert("inner clicked");
});
你可以用
$("#outer").bind('click',function(e){
alert("outer clicked");
});
$('#outer').on('click',"#inner",function(e){
e.stopImmediatePropagation();
alert("inner clicked");
});
从问题中可以看出:“将.click()与eventStopPropogation结合使用效果很好,但是由于我需要使用live、on、delegate等内容的动态特性”-他使用的是动态添加的元素,静态事件处理程序不是一个选项。好的,鉴于这个问题,这是正确的。这让我意识到我的例子没有反映我当前的问题(需要添加一个中间div)。我会将此标记为正确答案并打开另一个问题。从问题开始:“将.click()与eventStopPropogation结合使用效果很好,但是由于我需要使用live、on、delegate等内容的动态性质”-他正在处理动态添加的元素,静态事件处理程序不是一个选项。好的,考虑到这个问题,这是正确的。这让我意识到我的例子没有反映我当前的问题(需要添加一个中间div)。我会将此标记为正确答案并打开另一个问题。那么为什么不在内部处理程序中放置event StopperPogation?@Derek,因为当您使用.live()
时,事件处理程序绑定到文档
;当委托事件处理程序函数被调用时,#outer
的click
事件已经触发,而且为时已晚。那么为什么不将事件stopPropogation放在内部处理程序中呢?@Derek,因为当您使用.live()
时,事件处理程序绑定到文档
;当委托事件处理程序函数被调用时,#outer
的单击事件已经触发,为时已晚。