欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

显示和隐藏一个div的问题

程序员文章站 2022-05-05 20:39:57
...

显示和隐藏一个div的问题

//代码1
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style type="text/css">
            #myDiv {
            width: 100px;
            height: 100px;
            background: red;
            display: none;
        }
    </style>
</head>

<body>
    <input type="button" value="出现">
    <div id="myDiv"></div>
    <script type="text/javascript">
        var oBtn = document.getElementsByTagName('input')[0];
        var oDiv = document.getElementById('myDiv');
        oBtn.onclick = function() {
            oDiv.style.display = (oDiv.style.display === "none") ? "block" : "none";
        }
    </script>
</body>
</html>

bug:上面代码,首次显示div,必须单击两次按钮,后面再显示隐藏就只需单击一次就可以了

方案:

1、如果将三元操作符的判断条件换成反面就可以了

//代码2
oDiv.style.display = (oDiv.style.display === "block") ? "none" : "block";

2、如果将display:none放在行内样式,也是可以的(为了结构样式分离,不推荐)

这是为什么呢:

因为style只能读取行内样式的属性值,所以放在行内样式里面,就是正常的执行

而放在css里,style是读取不到css里的属性值,所以代码1下:

  • 第一次单击时,display不为"none",而是什么都没有,空字符串,结果就是false,false的话就赋值none。所以还是隐藏
  • 第二次单击时,因为第一次单击js给display赋值none了,所以这次正常执行,赋值为block

再看代码2:

  • 第一次单击时,display也是空字符串,结果是false,false的话就赋值block。所以一步到位了

总结:开始的判断条件应该写成当前状态的反面