我有三个div盒子
第一个div名为main,id为"main"
,包含两个其他的盒子,它们的id分别为"menu_header"
和"menu_options"
这是我的html代码
<div id="main">
<div id="menu_header">
</div>
<div id="menu_options">
</div>
</div>
<span>Something here</span>
这是我的 CSS
#main{
display:table-cell;
position:relative;
top:100px;
border:solid purple;
}
#menu_header{
position:relative;
border:solid black;
background:red;
width:100px;
top:200px;
height:100px;
/* -moz-transition-property:bottom;
-moz-transition-duration:2s;
transition-property:top;
transition-duration:1s;*/
}
#menu_options{
background:blue;
position:absolute;
bottom:0%;
border:solid black;
width:100px;
height:100px;
}
/*#menu_header:active{
top:100px;
}*/
(忽略掉已被注释的 CSS 过渡效果)
以下是我的 JavaScript 代码:
function test(e){
//if(e.target.id=="menu_options"){return};
$('#menu_header').animate({top:'-10'},1000);
//var t=document.getElementById('menu_header')
// t.setAttribute('top','40px');
t.style="position:relative;border:solid black;background:red;width:100px;top:60px;height:100px;"
}
document.getElementById('main').addEventListener('click',test,false)
最后这是我的实验jsfiddle链接 http://jsfiddle.net/repzeroworld/ev7k688s/
在这种情况下,当我在id为"main"
的父容器上设置一个点击事件处理程序时,除了每次单击此父容器的子div(id为"menu_options"
)之外,一切都正常工作。
我发现下面的链接,但不知何故,在我的情况下,此处的event.propogation()
解决方案似乎无法工作。
一个不好的解决方法,以防止任何操作执行,如果子div捕获事件,则是
if(e.target.id=="menu_header"){return};
我在我的javascript代码中注释掉了上述内容。
问题:
为什么具有id“menu_options”的子div捕获了父容器具有id“main”的事件,尽管我在addEventListener
中设置了false
以防止事件冒泡?
event.stopPropagation()
,而不是event.propagation()
。使用addEventListener()
设置false
并不能禁用冒泡。 - user1106925