我试图使用在Stackoverflow上找到的一些代码来设置“当您单击元素外部时,关闭它”的功能:
$(document).click(function() {
$('.list-to-hide').hide();
});
$('.show-list-button').click(function(event) {
event.stopPropagation();
});
有人能解释一下使用stopPropagation的后半部分吗?我不明白为什么需要它。
谢谢! Matt
我试图使用在Stackoverflow上找到的一些代码来设置“当您单击元素外部时,关闭它”的功能:
$(document).click(function() {
$('.list-to-hide').hide();
});
$('.show-list-button').click(function(event) {
event.stopPropagation();
});
有人能解释一下使用stopPropagation的后半部分吗?我不明白为什么需要它。
谢谢! Matt
想象一下:
<div>
DIV
<span>
Span
</span>
<div>
并且:
$('div').click(function() { alert('div clicked'); });
$('span').click(function() { alert('span clicked'); });
当您单击 span 元素时,由于同时也点击了 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()
基本上是说 只将此点击事件应用于此子节点,不要告诉父容器任何东西,因为我不希望它们做出反应。event.stopPropagation()
就像告诉他保留所有 $100,因为公司不需要知道乘车情况。event.stopPropagation();
阻止事件冒泡到DOM上级元素。如果没有这行代码,当单击 .show-list-button
时,文档的点击处理程序也会触发。有了它,文档的点击就不会触发。
你读过这个吗?
http://api.jquery.com/event.stopPropagation/
它阻止事件冒泡到DOM树,防止任何父处理程序被通知该事件。
示例
在点击事件上停止冒泡。
$("p").click(function(event){
event.stopPropagation();
// do something
});
stopPropagation()
方法传递到父元素中。 - Victor Eke