Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
处理程序已存在且已绑定时,在.live()上执行JQuery StopRopagation_Jquery_Event Bubbling_Stoppropagation - Fatal编程技术网

处理程序已存在且已绑定时,在.live()上执行JQuery StopRopagation

处理程序已存在且已绑定时,在.live()上执行JQuery StopRopagation,jquery,event-bubbling,stoppropagation,Jquery,Event Bubbling,Stoppropagation,我知道现场电话是通过文档冒出来的,这就是我遇到问题的原因 不幸的是,我使用的是绑定元素的第三方库,并且希望创建一个案例,在这个案例中,单击事件不会冒泡到这些元素 将.click()与eventStopPropogation结合使用效果很好,但是由于内容的动态性,我需要使用live、on、delegate等。。。 这是我的问题。我需要防止单击“内部”分区时触发“外部”单击。我可以不更改“外部”处理程序 提前感谢您的帮助 HTML: 在绑定到外部的委托上使用,并在内部的单击处理程序中调用e.sto

我知道现场电话是通过文档冒出来的,这就是我遇到问题的原因

不幸的是,我使用的是绑定元素的第三方库,并且希望创建一个案例,在这个案例中,单击事件不会冒泡到这些元素

将.click()与eventStopPropogation结合使用效果很好,但是由于内容的动态性,我需要使用live、on、delegate等。。。 这是我的问题。我需要防止单击“内部”分区时触发“外部”单击。我可以更改“外部”处理程序

提前感谢您的帮助

HTML:


在绑定到
外部的
委托上使用
,并在
内部的
单击处理程序中调用
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
单击事件已经触发,为时已晚。