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

查看:111
本文介绍了javascript - 用js写了一个简单的tab栏原理demo,但一运行就卡死浏览器。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

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

<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>

解决方案

注意这两行代码:

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

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

这篇关于javascript - 用js写了一个简单的tab栏原理demo,但一运行就卡死浏览器。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆