为了账号安全,请及时绑定邮箱和手机立即绑定

函数里的this为什么不能用li[i]呢?

<!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>


正在回答

3 回答

你可以试着把i和z声明为let类型的变量,看看问题还存不存在了。

0 回复 有任何疑惑可以回复我~
#1

青云123 提问者

可以了 很神奇 那let是用来定义块级的变量吧 也就是说一般放在函数或者for循环这种局部里 是不是在全局定义就不合乎规范了啊?
2017-01-02 回复 有任何疑惑可以回复我~

这是因为是全局作用域变量,for循环结束后i的值已经变为了3,onclick引用的是变换之后的值了,这是典型的闭包问题。

0 回复 有任何疑惑可以回复我~
#1

青云123 提问者

这为什么会是一个闭包的问题啊,如果按照代码运行的顺序,从上往下,在for循环里不是应该 给每个li[i]对象绑定一个onclick事件吗
2016-12-29 回复 有任何疑惑可以回复我~

http://img1.sycdn.imooc.com//5861b8f300010d6d12380653.jpg在第一层循环里alert(i)正常打印0,1,2但是在里面的onclick事件里alert(i)却是3,这是为什么?

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

函数里的this为什么不能用li[i]呢?

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号