使用js做的一个列表层次,在点击加号后,列表展开,里面有好几个选项,但是点击选项之后,列表就自动关闭了,不知道我哪里的属相设置的有问题,以下是我的js的代码
<script type="text/javascript">
window.onload=setfunction;
function setfunction(){
var lis=document.getElementsByTagName("li");
for(var i=0;i<lis.length;i++){
if(lis[i].className=="open"){
lis[i].onmouseup=handlemouseup;
}
}
}
function handlemouseup(){
var state;
if(this.className=="open"){
this.className="close";
state="block";
}
else if(this.className=="close"){
this.className="open";
state="none";
}
var ulobj=this.getElementsByTagName("ul");
ulobj[0].style.display=state;
}
</script>
列表是的层次是这样的
<ul>
<li>
<ul>
<li></li>
<li></li>
<li></li>
</ul>
</li>
<li>
<ul>
<li></li>
<li></li>
<li></li>
</ul>
</li>
</ul>
但是结果在执行的时候就成了不管点列表里面的哪一个,列表都会关闭,不知道有没有懂的人帮忙看一下问题,谢谢大家啦~~
事件冒泡的原因,因为你的设置了父节点onmouseup,子节点虽然没有这个事件,但是点击子节点时,事件冒泡,会执行父节点的相同事件,阻止事件冒泡就好了。
function stopBubble(e)
{
if (e && e.stopPropagation)
e.stopPropagation()
else
window.event.cancelBubble=true
}
把这个stopBubble(e)函数放到你想要的阻止事件冒泡函数里面就可以阻止事件冒泡了
没看代码,太乱了,问题应该是选择器选择的对象搞错了
谢谢,我粘上去没想到成了这样,我看看,是不是选择器出错
=========给你写个完整代码吧,如果//stopBubble(e); 注掉就会弹出两个框框,如果没有注掉就只有pp那个框框。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>冒泡测试</title>
</head>
<body>
<div id="dd">
<div id="pp">clickme</div>
</div>
var pp = document.getElementById("pp");
var dd = document.getElementById("dd");
pp.onclick=function(e){ //给pp设置点击事件
alert("我是pp!");
//stopBubble(e);
};
dd.onclick=function(e){ //给dd设置点击事件
alert("我是dd!");
};
function stopBubble(e)
{
if (e && e.stopPropagation)
e.stopPropagation()
else
window.event.cancelBubble=true
}
</script>
</body>
</html>