[英]can someone explain how this stopPropagation works?
我试图使用我在 Stackoverflow 上找到的一些代码来设置这种“当你点击元素外部时,关闭它”类型的东西:
$(document).click(function() {
$('.list-to-hide').hide();
});
$('.show-list-button').click(function(event) {
event.stopPropagation();
});
有人可以用 stopPropagation 解释后面的部分吗? 我不明白为什么需要它。
谢谢! 马特
想象一下:
<div>
DIV
<span>
Span
</span>
<div>
和:
$('div').click(function() { alert('div clicked'); });
$('span').click(function() { alert('span clicked'); });
当您单击跨度时,它恰好也触发了 div,因为您也单击了 div。
现在,如果我们只想提醒 span,我们需要在点击 span 时停止触发 div 点击,所以我们这样做:
$('div').click(function() { alert('div clicked'); });
$('span').click(function(e) { alert('span clicked'); e.stopPropagation(); });
您的示例代码缺少一个重要部分:
$(document).click(function() {
$('.list-to-hide').hide();
});
$('.show-list-button').click(function(event) {
event.stopPropagation();
$('.list-to-hide').show();
});
如果没有event.stopPropagation()
,它将显示列表,然后将其隐藏,因为.show-list-button
在$(document)
内,因此两个单击处理程序都会触发。 event.stopPropagation()
基本上说只将此单击事件应用于THIS CHILD NODE并且不告诉父容器任何内容,因为我不希望它们做出反应。
可以这样想——你以 100 美元租一辆出租车。 司机给他的公司 80 美元。 event.stopPropagation()
就像告诉他保留所有 100 美元,因为公司不需要知道任何关于骑行的信息。
event.stopPropagation();
防止事件冒泡 DOM。 如果没有这一行,单击.show-list-button
文档的单击处理程序也会触发。 有了它,文档点击将不会触发。
你读过这个吗?
http://api.jquery.com/event.stopPropagation/
它防止事件在 DOM 树中冒泡,防止任何父处理程序收到事件通知。
例子
杀死点击事件的冒泡。
$("p").click(function(event){
event.stopPropagation();
// do something
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.