zoukankan      html  css  js  c++  java
  • 显示和隐藏一个div的问题

    显示和隐藏一个div的问题

    //代码1
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="utf-8">
    	<title></title>
    	<style type="text/css">
    	        #myDiv {
    			 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。所以一步到位了

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

  • 相关阅读:
    4815 江哥的dp题a
    CON1023 明明的计划
    5200 fqy的难题----2的疯狂幂
    [SCOI2005] 最大子矩阵
    1457 又是求和?
    2064 最小平方数
    vijos P1459车展
    1366 xth 的第 12 枚硬币
    1360 xth 的玫瑰花
    3223: Tyvj 1729 文艺平衡树
  • 原文地址:https://www.cnblogs.com/u14e/p/5238950.html
Copyright © 2011-2022 走看看