javascript - 求大神们看看这段编的问题出在哪里?
黄舟
黄舟 2017-04-11 11:14:42
[JavaScript讨论组]







1111

2222

3333

4444

ap[i].style.display="none";请问为何这一句浏览器一直报错呢,找了2小时都没找到问题所在。。

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(8)
天蓬老师

一楼说得对,楼主需要研究下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>
PHPz

题主不如研究下for的用法?

你的iBut是一个HTMLCollection,使用for对其循环的的话,除了以数字标注的子项以外,还有item、namedItem、length三个属性会被取出来。

你的这个需求,建议用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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号