首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JS显示Div需要2次点击

JS显示Div需要2次点击
EN

Stack Overflow用户
提问于 2020-09-26 06:46:02
回答 3查看 68关注 0票数 2

我正试图用JavaScript显示一个div,但正如标题所说,它需要2次点击才能显示出来。下面是我使用的代码,在同一个文件上用<script>标记调用JS:

代码语言:javascript
复制
<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。发生了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-09-26 06:52:21

您需要单击该按钮两次,因为当您第一次单击该按钮时,以下条件

代码语言:javascript
复制
mobile_search.style.display === "none"

false。这是因为Element.style属性返回CSSStyleDeclaration对象,该对象包含使用style属性添加到元素上的样式列表。换句话说,它返回元素上设置的内联CSS样式。在您的代码中,由于您没有使用内联CSS添加display: none样式,所以mobile_search.style.display的初始值与您预期的不一样。

因此,在第一次单击时,执行else块,将display设置为none,当第二次单击时,上述条件的计算结果为true,并显示input元素。

解决方案

要解决这个问题,您有几个选择:

  • display: none作为内联样式添加到#mobile-search元素.

中。

的值。

var mobile_search =document.getElementById(“移动搜索”);函数show_search() { if === "none") { mobile_search.style.display =“块”;}show_search{ mobile_search.style.display =“无”;}}

.移动搜索{ display: none;}

票数 3
EN

Stack Overflow用户

发布于 2020-09-26 06:53:51

样式属性不会从CSS返回样式。根据您的情况,当您单击该按钮时,它将添加display: none,单击第二次添加display: block后,这就是为什么您需要单击两次才能显示div。

你可以用两种方法试试。

步骤1:只是切换块,单击函数上没有

代码语言:javascript
复制
var toggle  = document.getElementById("mobile-search-button");
var content = document.getElementById("mobile-search");

toggle.addEventListener("click", function() {
  content.style.display = (content.dataset.toggled ^= 1) ? "block" : "none";
});
代码语言:javascript
复制
.mobile-search {
    display: none;
  }
代码语言:javascript
复制
<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">
    <i class="fa fa-search" aria-hidden="true"></i>
</button>

步骤2:

您不需要任何css,添加样式到您的输入框。

代码语言: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";
    }
  }
代码语言:javascript
复制
<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" style="display: none">
  <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>

步骤:额外的

你可以用一种更简单的方法做更多的事情。只需按一下类即可

代码语言:javascript
复制
$("#mobile-search-button").on("click", function(){
  $("#mobile-search").toggle();        
});
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<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" style="display: none">
  <input type="search" name="">
</div>

<button class="search-btn" id="mobile-search-button">
    <i class="fa fa-search" aria-hidden="true"></i>
</button>

票数 0
EN

Stack Overflow用户

发布于 2020-09-26 07:13:38

当您已经有了一个类来隐藏mobile-search时,为什么不切换一下:

代码语言:javascript
复制
var toggle = document.getElementById("mobile-search-button");
var classes = document.getElementById("mobile-search").classList;

toggle.addEventListener("click", function() {
  classes.contains("mobile-search") ? classes.remove("mobile-search") : classes.add("mobile-search");
});
代码语言:javascript
复制
.mobile-search {
  display: none;
}
代码语言:javascript
复制
<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">
    <i class="fa fa-search" aria-hidden="true"></i>
</button>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64074709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档