选项卡制作过程中的问题:
1、把所有的input和div应丢在一个大的div中
2、给按钮设置一个选中的颜色是通过class来设置的,通过行间样式让默认的div显示
3、每次点击产生变化时要通过for循环将之前的演示给清空,设置className为空,display为none
4、this的使用.我写的是oBtn[i],这个时候应该涉及到i的作用域的问题,所以一直报错。this就是指当前事件的按钮。
5、下面对应的div是用js给按钮设置一个index的值
<!DOCTYPE html>
<html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style> #div1 div{ height: 200px; width: 100px; background: grey; border: 1px solid red; display: none; } .active{ background: yellow; } </style> <script type="text/javascript"> window.onload = function (){ var oDiv = document.getElementById('div1'); var oBtn = oDiv.getElementsByTagName('input'); var oDiv2 = oDiv.getElementsByTagName('div'); for(var i=0;i<oBtn.length;i++){ oBtn[i].index = i; oBtn[i].onclick = function () { for(var i=0;i<oBtn.length;i++){ oBtn[i].className = ''; oDiv2[i].style.display = 'none'; }
this.className = 'active'; oDiv2[this.index].style.display = 'block'; }; } }; </script> </head> <body> <div id="div1"> <input class="active" type="button" value="zhaosheng"/> <input type="button" value="jiaoyu"/> <input type="button" value="chuguo"/> <input type="button" value="peixun"/> <div style="display: block">zhaosheng</div> <div>jioayu</div> <div>chuguo</div> <div>peixun</div> </div> </body> </html>
通过闭包的学习,将之前写的代码进行了改进。之前是因为里面函数的i是父级函数的活动对象,当父级函数返回的时候,变量i的值都是4,他们引用的是同一个i。可以同过index来创建一个索引,也可以通过创建另一个匿名函数强制让闭包的行为符合预期。
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style> #div1 div{ height: 200px; width: 100px; background: grey; border: 1px solid red; display: none; } .active{ background: yellow; } </style> <script type="text/javascript"> window.onload = function (){ var oDiv = document.getElementById('div1'); var oBtn = oDiv.getElementsByTagName('input'); var oDiv2 = oDiv.getElementsByTagName('div'); for(var i=0;i<oBtn.length;i++) { !function(num) { oBtn[num].onclick = function () { for(var i=0;i<oBtn.length;i++){ oBtn[i].className = ''; oDiv2[i].style.display = 'none'; } oBtn[num].className = 'active'; oDiv2[num].style.display = 'block'; }; }(i); } }; </script> </head> <body> <div id="div1"> <input class="active" type="button" value="zhaosheng"/> <input type="button" value="jiaoyu"/> <input type="button" value="chuguo"/> <input type="button" value="peixun"/> <div style="display: block">zhaosheng</div> <div>jioayu</div> <div>chuguo</div> <div>peixun</div> </div> </body> </html>