比如说
<script>
function xx(id){
if(document.getElementById(id).style.display!="none")
{
document.getElementById(id).style.display="none";
}
else
{
document.getElementById(id).style.display="block";
}}
</script><ul>
<li onclick="xx(1)" >aaaaa</li>
<ul id=1>
<li onclick="xx(2)" >1111</li>
<ul id=2>
<li>222222222</li>
</ul>
</ul>
</ul>当我单击 <li onclick="xx(2)" >1111</li> 的时候 <ul id=1></ul> 为什么也会隐藏? 怎么破?
<script>
function xx(id){
if(document.getElementById(id).style.display!="none")
{
document.getElementById(id).style.display="none";
}
else
{
document.getElementById(id).style.display="block";
}}
</script><ul>
<li onclick="xx(1)" >aaaaa</li>
<ul id=1>
<li onclick="xx(2)" >1111</li>
<ul id=2>
<li>222222222</li>
</ul>
</ul>
</ul>当我单击 <li onclick="xx(2)" >1111</li> 的时候 <ul id=1></ul> 为什么也会隐藏? 怎么破?
function xx(id){
if(document.getElementById(id).style.display!="none")
{
alert(id);
document.getElementById(id).style.display="none";
}
else
{
document.getElementById(id).style.display="block";
}
}这样看你就知道这个方法执行了2次
<ul>
<li onclick="xx(1)" style="border:1px solid blue">aaaaa</li>
<ul id=1 >
<li onclick="xx(2)" style="border:1px solid blue">1111</li>
<ul id=2 >
<li style="border:1px solid blue">222222222</li>
</ul>
</ul>
</ul>给每个li加上边框,就知道为什么点击时父对象也被触发了
<script>
function xx(id){
var ev = window.event || arguments.callee.caller.arguments[0];
if(window.event) ev.cancelBubble = true;
else
{
ev.stopPropagation();
}
if(document.getElementById(id).style.display!="none")
{
document.getElementById(id).style.display="none";
}
else
{
document.getElementById(id).style.display="block";
}
}
</script><ul>
<li onclick="xx(1)" >aaaaa</li>
<ul id=1>
<li onclick="xx(2)" >1111</li>
<ul id=2>
<li>222222222</li>
</ul>
</ul>
</ul>
用如下代码:<script>
function xx(id)
{
if(document.getElementById(id).style.display!="none")
{
document.getElementById(id).style.display="none";
}
else
{
document.getElementById(id).style.display="block";
}
window.event.cancelBubble=true; //ie s
window.event.stopPropagation(); //ff s
}
</script><ul>
<li onclick="xx(1)" >aaaaa</li>
<ul id=1>
<li onclick="xx(2)" >1111</li>
<ul id=2>
<li>222222222</li>
</ul>
</ul>
</ul>
我看你写的挺多 你看看我刚百度找到的 和您那个有什么区别啊 兼容性的if(document.all)
{
event.cancelBubble = true;
}
<li onclick="xx(1)" >aaaaa</li>
<ul id=1>
<li onclick="xx(2)" >1111</li>
<ul id=2>
<li>222222222</li>
</ul>
</ul>
</ul>用嵌套上看 楼主这样的结果是导致节点很不清晰 +个样式可以看出<ul>
<li onclick="xx(1)" style="border:1px solid #FF0000">aaaaa</li>
<ul id=1>
<li onclick="xx(2)" style="border:1px solid #000000">1111</li>
<ul id=2>
<li>222222222</li>
</ul>
</ul>
</ul>------------------万恶的分割线---------------------------
<ul id=1>
<li onclick="xx(2)" >1111</li>
<ul id=2>
<li>222222222</li>
</ul>
</ul>
是作为
<li onclick="xx(1)" >aaaaa</li>的子节点 所以单击 <li onclick="xx(2)" >1111</li>会先执行xx(2),然后是xx(1),日过楼主非要如此建议代码改成同级节点<ul>
<ul><li onclick="xx(1)" >aaaaa</li></ul> <!--添加一个ul标签组与下面的ul组匹配-->
<ul id=1>
<li onclick="xx(2)" >1111</li>
<ul id=2>
<li>222222222</li>
</ul>
</ul>
</ul>
事件流有两种
1.从外到里,谓之'捕获',capture
2.从里到外,谓之'冒泡',bubblingie只支持第一种,firefox可指定事件在capture阶段触发还是bubble阶段触发
多多google一下,或者买本<<JavaScript 高级程序设计>>看看,上面写得很清楚.