javascript - 下拉按钮仅在边框附近单击时才起作用

标签 javascript html css button dropdown

我已经成功编写了一个下拉按钮,单击时显示文本,然后单击页面上的其他任何位置则消失。但我有一个问题,由于某种原因,除非您单击按钮的外边缘而不是中心,否则该按钮将无法工作。 (例如,如果您单击按钮中间,则不会发生任何事情,但如果您单击按钮边缘附近,则会显示下拉菜单。)

有谁知道为什么会发生这种情况以及如何修复它,以便无论您单击按钮的何处,都会显示下拉列表。

function myFunction() {
  document.getElementById("myDropdown").classList.toggle("show");
}
  
window.onclick = function(event) {
  if (!event.target.matches('.dropbtn')) {
    var dropdowns = document.getElementsByClassName("dropdown-content");
    var i;
    for (i = 0; i < dropdowns.length; i++) {
      var openDropdown = dropdowns[i];
      if (openDropdown.classList.contains('show')) {
        openDropdown.classList.remove('show');
      }
    }
  }
}
.dropbtn {
  cursor: pointer;
  background-color: #fafafa;
  border: none;
  text-align: left;
  margin-bottom: 5px;
  padding-left: 0px;
}

.dropdown {
  position: absolute;
  display: inline-block;
  text-align: left;
}

.dropdown-content {
  display: none;
  position: relative;
  overflow: auto;
  margin-top: 10px;
  margin-bottom: 10px;
  z-index: 1;
  background-color: #eeeeee;
  padding: 10px;
}


.show { 
  display: block;
}
<div class="dropdown">
  <button onclick="myFunction()" class="dropbtn"><p>Dropdown Button</p></button>
  <div id="myDropdown" class="dropdown-content">
  Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore.
  </div>
</div>

最佳答案

这是因为该事件源自p 标记。删除该内容并向 dropbtn 添加填充以实现类似的样式

function myFunction() {
  document.getElementById("myDropdown").classList.toggle("show");
}

window.onclick = function(event) {
  if (!event.target.matches('.dropbtn')) {
    var dropdowns = document.getElementsByClassName("dropdown-content");
    var i;
    for (i = 0; i < dropdowns.length; i++) {
      var openDropdown = dropdowns[i];
      if (openDropdown.classList.contains('show')) {
        openDropdown.classList.remove('show');
      }
    }
  }
}
.dropbtn {
  cursor: pointer;
  background-color: #fafafa;
  border: none;
  text-align: left;
  padding: 10px;
}

.dropdown {
  position: absolute;
  display: inline-block;
  text-align: left;
}

.dropdown-content {
  display: none;
  position: relative;
  overflow: auto;
  margin-top: 10px;
  margin-bottom: 10px;
  z-index: 1;
  background-color: #eeeeee;
  padding: 10px;
}

.show {
  display: block;
}
<div class="dropdown">
  <button onclick="myFunction()" class="dropbtn">
  Dropdown Button</button>
  <div id="myDropdown" class="dropdown-content">
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore.
  </div>
</div>

关于javascript - 下拉按钮仅在边框附近单击时才起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63969148/

相关文章:

javascript - 使用 postal.js 更新 React 组件

javascript - 使文本框大小相对于 gridster 中的小部件大小

javascript - 在一个表达式中加载和使用 ES6 模块

html - 如何根据屏幕尺寸重新排序 <OL> (bootstrap 4)

html - 用三 Angular 形创建透明的CSS边框

html - 用于固定定位 ASP.NET 的 Z-Index

javascript - 动画到另一种背景颜色,然后再返回

javascript - 如何将图像拖到 "trash can"并删除该单个图像

javascript - 如果 href 包含 X,则更改 href

css - 第二个引导导航栏上的样式下拉菜单