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

请明白的同学帮忙看一下这段JS代码应该如何修改才能达到切换效果

	<script type="text/javascript">
		window.onload=function(){
			var oLis=document.getElementsByTagName('li');
			var oDivs=document.getElementsByTagName('div');
			for( var i=0;i<oLis.length;i++){
				oLis[i].onclick=function(){
					for(var n=0;n<oLis.length;n++){
						if(n==i){
							oDiv[n].className='on';
						}
						else{
							oDiv[n].className='hide';
						}
						
					}
				}
			}
		}
	</script>

http://img1.sycdn.imooc.com//567a473d00019b6205940371.jpg

请大家看看是哪里进入了误区,在这个思路的基础上应该如何修改代码呢?

正在回答

4 回答

<script type="text/javascript">     
    window.onload=function(){
        var oTab = document.getElementById("tabs")
        var li = document.getElementsByTagName("li");
        var div = oTab.getElementsByTagName("div");//oTabs.get...是为了定义className作用对象为id为tabs下的所有文本div
        
        for(var i=0;i<li.length;i++){//获取所有i编号的元素
        	(function  (i) {     //闭包函数,就可以把参数i传递到函数里面了
        		li[i].onclick = function(){//再注册一个点击事件,当点击的时候所有标签都恢复最初状态
	            	for(var n=0;n<li.length;n++){//这步是相对于未被点击部分的样式
		                li[n].className = "";
		                div[n].className = "hide";
	           		}
		            this.className = "on";//再对点击事件添加相应的属性
		            div[i].className = "";//通过之前的index编号绑定的指定div
           	 	}
        	})(i);  //闭包函数
        }
    }
	</script>


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

哪位好心的同学能提供一下闭包后的代码吗?

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

除了oDivs不对以外,还涉及到绑定函数的问题

oList[i].onclick执行的时候,function绑定到li标签上,但是执行的时候才会执行function函数里的内容,这个时候的i已经不是当时循环里的i了,而是循环结束后的i,所以onclick的function里面不能出现i

要么用this,要么用闭包

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

Luther_Alice 提问者

闭包这个还是不太懂,能写一下具体的闭包代码吗,非常感谢!
2015-12-24 回复 有任何疑惑可以回复我~
#2

Caballarii 回复 Luther_Alice 提问者

闭包是个专门的知识点,要讲很久,网上关于js的闭包也有资料,你先理解这里这样写为什么不行吧,理解了这个能对你的思路有帮助
2015-12-24 回复 有任何疑惑可以回复我~

第9行 和 第12行 ,oDiv[n] 改成 oDivs[n]

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

Luther_Alice 提问者

天啊,好粗心,我都没有发现,谢谢啦!
2015-12-24 回复 有任何疑惑可以回复我~
#2

Jason333 回复 Luther_Alice 提问者

不过还有其他问题,没仔细看,楼下说的很详细,就不重复了
2015-12-24 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

请明白的同学帮忙看一下这段JS代码应该如何修改才能达到切换效果

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信