用js写了一个简单的tab栏原理demo,但一运行就卡死浏览器。

发布于 2022-09-03 23:37:50 字数 1756 浏览 24 评论 0

火狐和谷歌都卡死。
代码如下:

<style>
        .box {
            width: 400px;
            margin: 100px auto 10px auto;
        }
        .bottom div{
            width: 400px;
            height: 290px;
            background-color: red;
            margin: 0 auto;
            display: none;
        }
        .bottom div:first-child {
            display: block;
        }
        .btnbg {
            background-color: pink;
        }
    </style>
    <script>
        window.onload=function(){
            var btns = document.getElementsByTagName("button");
            var divs = document.getElementById("divs");
            for(var i=0;i<btns.length;i++){
                btns[i].index = i;
                btns[i].onclick = function(){
                    for(var j=0;j<btns.length;j++){
                        btns[j].className = "";
                    }
                    this.className = "btnbg";
                }
                for(var i=0;i<divs.length;i++){  
                    divs[i].style.display = "none";
                    divs[this.index].style.display = "block";
                }
            }
        }
    </script>
</head>
<body>
<div class="box">
    <div class="top">
        <button>第一个</button>
        <button>第二个</button>
        <button>第三个</button>
        <button>第四个</button>
        <button>第五个</button>
    </div>
    <div class="bottom" id="divs">
    <div>第一个盒子</div>
    <div>第二个盒子</div>
    <div>第三个盒子</div>
    <div>第四个盒子</div>
    <div>第五个盒子</div>
    </div>
</div>
</body>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

樱娆 2022-09-10 23:37:51

注意这两行代码:

for(var i=0;i<btns.length;i++){
...
    for(var i=0;i<divs.length;i++){

由于不是 let,所以并没有块级作用域,于是乎外层循环和内层循环其实用的同一个 i,而你那个 divs 只是一个元素,并不是集合,所以 length 属性为 undefined,所以内层循环每次都把 i 重置了,于是乎死循环了,于是乎卡死了。

执手闯天涯 2022-09-10 23:37:51

把for放在click里面试试

厌味 2022-09-10 23:37:51

两个for循环, 里面的for重置了i

执妄 2022-09-10 23:37:51

看一下jquery,其实没必要用到两个for

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文