javascript - JS显示Div需要2次点击
问题描述
我正在尝试使用 JavaScript 显示一个 div,但正如标题所说,它需要点击 2 次才能显示。这是我正在使用的代码,并且正在使用<script>
同一文件上的标签调用 JS:
<head>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
</head>
<div id="mobile-search" class="mobile-search">
<input type="search" name="">
</div>
<button class="search-btn" id="mobile-search-button" onclick="show_search()">
<i class="fa fa-search" aria-hidden="true"></i>
</button>
<style>
.mobile-search {
display: none;
}
</style>
<script type="text/javascript">
var mobile_search = document.getElementById("mobile-search");
function show_search() {
if (mobile_search.style.display === "none") {
mobile_search.style.display = "block";
} else {
mobile_search.style.display = "none";
}
}
</script>
如您所见,需要单击 2 次才能显示 div,而我希望它只有 1 次。这是怎么回事?
解决方案
您需要单击该按钮两次,因为当您第一次单击该按钮时,以下条件
mobile_search.style.display === "none"
是false
。这是因为Element.style
属性返回CSSStyleDeclaration
的对象包含使用style
属性添加到元素上的样式列表。换句话说,它返回在元素上设置的内联 CSS 样式。在您的代码中,由于您没有display: none
使用内联 CSS 添加样式,初始值 of mobile_search.style.display
不是您所期望的。
因此,在第一次单击时,else
块执行,设置display
为none
,当您第二次单击时,上述条件评估为true
并input
显示元素。
解决方案
你有几个选项来解决这个问题:
添加为元素
display: none
的内联样式。#mobile-search
<div id="mobile-search" class="mobile-search" style="display: none;"> <input type="search" name="" /> </div>
使用
Window.getComputedStyle()
方法获取display
属性的值。var mobile_search = document.getElementById("mobile-search"); function show_search() { if (window.getComputedStyle(mobile_search).display === "none") { mobile_search.style.display = "block"; } else { mobile_search.style.display = "none"; } }
.mobile-search { display: none; }
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"> <div id="mobile-search" class="mobile-search"> <input type="search" name=""> </div> <button class="search-btn" id="mobile-search-button" onclick="show_search()"> <i class="fa fa-search" aria-hidden="true"></i> </button>
推荐阅读
- c#-4.0 - 为什么程序集配置会覆盖 app.config?
- r - 在堆叠的“geom_bar()”中将误差线与组均值垂直对齐
- html5-video - 使用 videogular2 从 Google 驱动器播放视频
- javascript - 如何在服务器(cpanel)上设置 nodejs 代码
- python - 将mysql查询结果(对象数组)转换为json
- git - 由于空间问题,如何更改 git-bare 存储库位置?
- angular - 离子搜索栏过滤器不是功能
- php - 在 iCalendar 文件 (.ics) 中设置管理器属性
- python - Pyspark Dataframe GroupBy Count 每次都不同
- python - 绘制 3D numpy 数组的第三轴