青云123
2016-12-26 17:26
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>实践题 - 选项卡</title>
<style type="text/css">
*{
margin:0;
padding:0;
}
ul{
list-style:none;
text-align:center;
line-height:20px;
width:350px;
height:20px;
border-bottom:2px solid saddlebrown;
}
ul li {
float:left;
width:50px;
height:20px;
margin-right:5px;
border:solid 1px #aaa;
border-bottom:none;
}
.hide{
display:none;
}
.on {
height:17px;
border-top:2px solid saddlebrown;
border-bottom:3px #fff solid;
}
#tabs {
width:350px;
margin:0 auto;
}
#tabs div{
width:348px;
height:88px;
border:1px solid #369;
border-top:none;
}
</style>
<script type="text/javascript">
// JS实现选项卡切换
window.onload=function (){
var tabs=document.getElementById("tabs");
var ul=tabs.getElementsByTagName("ul")[0];
var li=ul.getElementsByTagName('li');
var div=tabs.getElementsByTagName("div");
for(i=0;i<li.length;i++){
li[i].aaa=i;
li[i].onclick=function (){
for(z=0;z<li.length;z++){
li[z].className='';
div[z].className='hide';
}
//document.write(i);
this.className='on';
div[this.aaa].className='';
}
}
}
</script>
</head>
<body>
<!-- HTML页面布局 -->
<div id="tabs">
<ul>
<li>房产</li>
<li>家居</li>
<li>二手房</li>
</ul>
<div>
275万购昌平邻铁三居 总价20万买一居<br>
200万内购五环三居 140万安家东三环<br>
北京首现零首付楼盘 53万购东5环50平<br>
京楼盘直降5000 中信府 公园楼王现房<br>
</div>
<div>
40平出租屋大改造 美少女的混搭小窝<br>
经典清新简欧爱家 90平老房焕发新生<br>
新中式的酷色温情 66平撞色活泼家居<br>
瓷砖就像选好老婆 卫生间烟道的设计<br>
</div>
<div>
通州豪华3居260万 二环稀缺2居250w甩<br>
西3环通透2居290万 130万2居限量抢购<br>
黄城根小学学区仅260万 121平70万抛!<br>
独家别墅280万 苏州桥2居优惠价248万<br>
</div>
</div>
</body>
</html>
你可以试着把i和z声明为let类型的变量,看看问题还存不存在了。
这是因为是全局作用域变量,for循环结束后i的值已经变为了3,onclick引用的是变换之后的值了,这是典型的闭包问题。
在第一层循环里alert(i)正常打印0,1,2但是在里面的onclick事件里alert(i)却是3,这是为什么?
JavaScript进阶篇
468861 学习 · 22582 问题
相似问题