显示和隐藏一个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。所以一步到位了
总结:开始的判断条件应该写成当前状态的反面