• 显示和隐藏一个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。所以一步到位了

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

  • 相关阅读:
    COS和CDN的关系
    【转】WebGL 着色器和GLSL
    【转】前端最新性能指标
    【转】理解音视频 PTS 和 DTS
    HLS
    【转】带有function的JSON对象的序列化与还原
    环信Demo 导入错误
    安卓中 使用html来使文字变色Html.fromHtml
    第三方下载控件 用起来还是不错的偶!Aria
    网络文件下载
  • 原文地址:https://www.cnblogs.com/u14e/p/5238950.html
Copyright © 2020-2023  润新知