关于事件冒泡 你的意思是如果用arrLayer[2,5]初始化,那么显示的结果是只alert 6和2,还是从6一直alert到2? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 最里面的一层是第0层 往上一层是+1 那就是第1层 那第2层应该是alert(4).arrLayer[2,5]应该是说先alert第2层,在alert 第5层吧 没能理解..... 不好意思,结果应该是alert(4),再alert(1),3楼理解的没错 如果layer=[1,3,4],就先后alert(5),alert(3),alert(2) 我指的层不一定是div,也可能是fildset,table等元素。 什么时候触发事件啊?点击按钮?还是在任意div上点击一下? 楼主对冒泡怎么理解的啊?按楼主的代码如果 onclick="alert(6)" 这个事件停止冒泡的话, 那么他所有父级元素的onclick事件就不会触发, 所以无法这样控制的... 这个不知道是不是你要的效果,如果是,也不是用冒泡来解决的.(貌似冒泡也解决不了...,个人见解)e.returnValue =false 阻止默认事件行为.....<body><div onclick="alert(1)"> <div onclick="alert(2)"> <div onclick="alert(3)"> <div onclick="alert(4)"> <div onclick="alert(5)"> <input id="oo" value="button" type="button" onclick="alert(6)"> </div> </div> </div> </div> </div> </body><script> var arrLayer = [2,5] var ok =0 var pan =false var obj=document.getElementById("oo") function init(layer){ while (obj!=document.body){ obj=obj.parentNode ok++ for(var i=0;i<layer.length;i++) { if(ok==layer[i]) {pan=true} } if(pan) {pan=false continue;} else {obj.onclick=function(e){ e=e||event e.returnValue =false}} } } init(arrLayer)</script> <html><body><div id="l1" onclick="alert(1)"> <div id="l2" onclick="alert(2)"> <div id="l3" onclick="alert(3)"> <div id="l4" onclick="alert(4)"> <div id="l5" onclick="alert(5)"> <input id="l6" type="button" onclick="alert(6)"> </div> </div> </div> </div></div><script> var arrLayer = [3,2,5] //当前响应事件的层数 function init(layer){ //需要实现的代码 for (i=1;i<=6;i++){ var f = false; for(j=0;j<layer.length;j++){ if( layer[j]==i ){ f = true; break; } } if( f==false ){ document.getElementById("l"+i).onclick = null; } } } init(arrLayer)</script> </body></html> 没有办法一次性把所有事件的句柄都取到。只有像12楼那样一个一个的设定了。好在事件的个数并不是特别多。 if( f==false ){ with (document.getElementById("l"+i)){ onclick = null; onmousedown = null; onmousemove = null; ...... } } ext4.0 文件上传问题 菜鸟 求助 js如何实现一个form表单 多个table数据 转换成json JS的九九乘法表问题 JavaScript设置字体背景,错了? java加密防反编绎最强方案 有个问题大家帮忙给看一下儿,不知windows有没有这个功能!客户需求见里面,谢谢你们大家:) 如何执行键盘某个键的事件? 请教radio的传值问题! button的平面效果怎麼做??? 怎么调用word??? help!!! --------------------------这段代码 哪错了???? 一段用JavaScript写的实现AJAX代码
arrLayer[2,5]应该是说先alert第2层,在alert 第5层吧 没能理解.....
按楼主的代码
如果 onclick="alert(6)" 这个事件停止冒泡的话, 那么他所有父级元素的onclick事件就不会触发, 所以无法这样控制的...
e.returnValue =false 阻止默认事件行为.....
<body>
<div onclick="alert(1)">
<div onclick="alert(2)">
<div onclick="alert(3)">
<div onclick="alert(4)">
<div onclick="alert(5)">
<input id="oo" value="button" type="button" onclick="alert(6)">
</div>
</div>
</div>
</div>
</div>
</body>
<script>
var arrLayer = [2,5]
var ok =0
var pan =false
var obj=document.getElementById("oo")
function init(layer){
while (obj!=document.body){
obj=obj.parentNode
ok++
for(var i=0;i<layer.length;i++)
{
if(ok==layer[i])
{pan=true}
}
if(pan)
{pan=false
continue;}
else
{obj.onclick=function(e){
e=e||event
e.returnValue =false}}
}
}
init(arrLayer)
</script>
<body>
<div id="l1" onclick="alert(1)">
<div id="l2" onclick="alert(2)">
<div id="l3" onclick="alert(3)">
<div id="l4" onclick="alert(4)">
<div id="l5" onclick="alert(5)">
<input id="l6" type="button" onclick="alert(6)">
</div>
</div>
</div>
</div>
</div>
<script>
var arrLayer = [3,2,5] //当前响应事件的层数
function init(layer){
//需要实现的代码 for (i=1;i<=6;i++){
var f = false;
for(j=0;j<layer.length;j++){
if( layer[j]==i ){
f = true;
break;
}
}
if( f==false ){
document.getElementById("l"+i).onclick = null;
}
}
}
init(arrLayer)
</script>
</body>
</html>
没有办法一次性把所有事件的句柄都取到。
只有像12楼那样一个一个的设定了。
好在事件的个数并不是特别多。 if( f==false ){
with (document.getElementById("l"+i)){
onclick = null;
onmousedown = null;
onmousemove = null;
......
}
}