首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery事件stopPropagation不适用于自定义事件

jQuery事件stopPropagation不适用于自定义事件
EN

Stack Overflow用户
提问于 2014-07-09 12:50:13
回答 3查看 1K关注 0票数 3
代码语言:javascript
复制
<!DOCTYPE html>
<html>

<head>

<script src="jquery-2.1.1.min.js" type="text/javascript"></script>

</head>

<body>

<div id="outer">
    <div id="inner">
    </div>
</div>

<script type="text/javascript">

$("#outer").on("myevent", function(event) { 
    alert(event.target.id);
    event.stopPropagation();
    return false;
});

$("div").trigger("myevent");

</script>

</body>

</html>

在上面的代码中,我预计事件myevent将由outer div处理一次。但我看到了两个警报:outerinner。为什么stopPropagation在这里不工作,以及如何防止将自定义事件传播给子事件?

编辑:我想在全球范围内触发事件,比如$("div").trigger("myevent");,但是我只想在订阅它的地方处理它。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-09 13:35:12

与在$('#outer').on('myevent')上使用$('#outer').on('myevent')不同,您需要在单独的处理程序中的每个div元素上使用它:

代码语言:javascript
复制
$("#outer").on("myevent", function(event) { 
    console.log(event.target.id);
    return false;
});
$('div').on('myevent', function(event) { // or $('*').on('myevent', ...
    event.stopPropagation();
});

$("div").trigger("myevent"); // only logs 'outer'

http://jsfiddle.net/mblase75/z7NQy/

票数 3
EN

Stack Overflow用户

发布于 2014-07-09 12:55:58

$("div").trigger("myevent");相当于:

代码语言:javascript
复制
$("div").each(function() {
    $(this).trigger("myevent");
});

因为jQuery会自动循环所有匹配选择器的元素。因此,它在内部和外部分别触发事件。

当它在内部DIV上触发它时,那里没有处理程序,所以没有什么可以阻止事件从外部DIV冒泡。

为了防止这种情况发生,您应该更具体地说明正在触发的元素:

代码语言:javascript
复制
$("#outer").trigger("myevent");
票数 2
EN

Stack Overflow用户

发布于 2014-07-09 12:56:08

您将收到两个警告,因为您在div上触发了div,因此它将应用于html中可用的所有div。在本例中,您有内部和外部div,它一个一个地触发myevent

要在外部div上触发myevent,请使用:

代码语言:javascript
复制
$("div#outer").trigger("myevent");

演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24654180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档