扫码关注官方订阅号
1111 2222 3333 4444
1111
2222
3333
4444
ap[i].style.display="none";请问为何这一句浏览器一直报错呢,找了2小时都没找到问题所在。。
ap[i].style.display="none";
人生最曼妙的风景,竟是内心的淡定与从容!
一楼说得对,楼主需要研究下for-in语句。这里先给出解决方法,希望楼主能好好翻阅一下文档。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <style type="text/css"> #p1 p{width: 200px; height: 300px; display: none; background: grey;} .active{background: yellow;} </style> <script type="text/javascript"> window.onload=function () { var op=document.getElementById('p1'); var iBut=op.getElementsByTagName('input'); var ap=op.getElementsByTagName('p'); for(i in iBut) { if (iBut.hasOwnProperty(i)) { iBut[i].index=i; iBut[i].onclick=function(){ for(j in iBut){ if (iBut.hasOwnProperty(j)) { // alert(j); iBut[j].className=""; ap[j].style.display="none"; } this.className="active"; ap[this.index].style.display="block"; } } // alert(i); } } } </script> </head> <body> <p id="p1"> <input type="button" value="教育"> <input type="button" value="培训"> <input type="button" value="招生"> <input type="button" value="出国"> <p style="display:block">1111</p> <p>2222</p> <p>3333</p> <p>4444</p> </p> </body> </html>
题主不如研究下for的用法?
for
你的iBut是一个HTMLCollection,使用for对其循环的的话,除了以数字标注的子项以外,还有item、namedItem、length三个属性会被取出来。
iBut
你的这个需求,建议用foreach。
foreach
你检查下你for(i in iBut) 输出的是什么就知道哪里错误了。输出的不止是下标。
for(i in iBut) //第一个变量用了I { iBut[i].index=i; iBut[i].onclick=function() { for(i in iBut) //第二个循环也用了变量I { iBut[i].className=""; ap[i].style.display="none"; }
变量冲突了
你得先说说在什么版本浏览器里报了什么错吧
1楼正解,还会取出item、namedItem、length三个属性。也可以用isNaN()判断一下。用楼上的hasOwnProperty()更好
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style type="text/css"> #p1 p{width: 200px; height: 300px; display: none; background: grey;} .active{background: yellow;} </style> <script type="text/javascript"> window.onload=function () { var op=document.getElementById('p1'); var iBut=op.getElementsByTagName('input'); var ap=op.getElementsByTagName('p'); for(i in iBut) { iBut[i].index=i; iBut[i].onclick=function() { for(j in iBut) { console.log(j); iBut[j].className=""; if(j<=3 && typeof(ap[j].style) != "undefined") { ap[j].style.display="none"; } } this.className="active"; ap[this.index].style.display="block"; } } } </script> </head> <body> <p id="p1"> <input type="button" value="教育"> <input type="button" value="培训"> <input type="button" value="招生"> <input type="button" value="出国"> <p style="display:block">1111</p> <p>2222</p> <p>3333</p> <p>4444</p> </p> </body> </html>
不要用for in遍历数组,全部统一采用标准的for循环变量数组( 我们无法保证我们引入的js是否会采用prototype扩展原生的Array ),建议for in只用来循环json
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
一楼说得对,楼主需要研究下for-in语句。这里先给出解决方法,希望楼主能好好翻阅一下文档。
题主不如研究下
for的用法?你的
iBut是一个HTMLCollection,使用for对其循环的的话,除了以数字标注的子项以外,还有item、namedItem、length三个属性会被取出来。你的这个需求,建议用
foreach。你检查下你for(i in iBut) 输出的是什么就知道哪里错误了。
输出的不止是下标。
变量冲突了
你得先说说在什么版本浏览器里报了什么错吧
1楼正解,还会取出item、namedItem、length三个属性。也可以用isNaN()判断一下。用楼上的hasOwnProperty()更好
不要用for in遍历数组,全部统一采用标准的for循环变量数组( 我们无法保证我们引入的js是否会采用prototype扩展原生的Array ),建议for in只用来循环json