jquery - 当不透明度为零时,下拉列表项仍然可单击

标签 jquery html css

问题是,当不透明度设置为零时,下拉按钮仍然可单击。我将不透明度设置为零,因为需要褪色效果。有没有其他方法可以让动画以及内容被 jquery 隐藏?

您可以在示例中看到,当我们将鼠标悬停在按钮下方时,光标会变成指针,并且元素可以单击。

尝试过这样做,但从未成功

$(".btn").on('click', function(e) {
  e.stopPropagation();
  var child = $(this).siblings();

  if (!child.hasClass("visible")) {
    child.animate({
      'opacity': 1
    }, 1000);
    child.addClass("visible");
  } else {
    child.animate({
      'opacity': 0
    }, 1000);
    child.removeClass("visible");
  }
});

$(document).on('click', function(e) {
  $(".visible").animate({
    'opacity': 0
  }, 1000);
  $(".visible").removeClass("visible");
});
.btn {
  outline: none;
  border: none;
  padding: 10px 20px;
  cursor: pointer;
  background-color: #eee;
  color: #7b7b7b;
  width: 150px;
  box-shadow: 4px 4px 6px 0px rgba(0, 0, 0, .16);
  font-weight: bold;
  margin-bottom: 20px;
}

.dropdown {
  position: relative;
  display: inline;
}

.btn-dropdown {
  padding: 0px;
  margin: 0px;
  list-style: none;
  background-color: #fff;
  position: absolute;
  left: 0px;
  top: 30px;
  box-shadow: 4px 4px 6px 0px rgba(0, 0, 0, .16);
  min-width: 200px;
  border: 1px solid #ddd;
  text-align: initial;
  max-height: 210px;
  overflow: auto;
  opacity: 0;
  z-index: 100;
}

.btn-dropdown li {
  padding: 6px;
  margin: 0px;
  border-bottom: 1px solid #ddd;
  cursor: pointer;
}

.btn-dropdown li:hover {
  background-color: #ddd;
}

.btn-dropdown li:last-child {
  border-bottom: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="dropdown">
  <button class="btn first">Select something</button>
  <ul class="btn-dropdown">
    <li>First</li>
    <li>Second</li>
    <li>Third</li>
    <li>Fourth</li>
  </ul>
</div>

<div class="dropdown">
  <button class="btn first">Select something</button>
  <ul class="btn-dropdown">
    <li>Black</li>
    <li>Brown</li>
    <li>Red</li>
    <li>Orange</li>
  </ul>
</div>

最佳答案

问题是因为当您将 opacity 设置为 0 时,元素仍然在 DOM 中,并且仍然可以与之交互,尽管事实上它们是看不见的- 类似于可见性:无

要解决此问题,您应该使用 display: none。您还可以结合使用 fadeToggle()fadeOut() 来简化逻辑,如下所示:

$(".btn").on('click', function(e) {
  e.stopPropagation();
  var $dropdown = $(this).siblings().fadeToggle(); // toggle this dropdown
  $('.dropdown .btn-dropdown').not($dropdown).fadeOut(); // hide other dropdowns
});

$(document).on('click', function(e) {
  $('.dropdown .btn-dropdown').fadeOut(); // hide all dropdowns
});
.btn {
  outline: none;
  border: none;
  padding: 10px 20px;
  cursor: pointer;
  background-color: #eee;
  color: #7b7b7b;
  width: 150px;
  box-shadow: 4px 4px 6px 0px rgba(0, 0, 0, .16);
  font-weight: bold;
  margin-bottom: 20px;
}

.dropdown {
  position: relative;
  display: inline;
}

.btn-dropdown {
  padding: 0px;
  margin: 0px;
  list-style: none;
  background-color: #fff;
  position: absolute;
  left: 0px;
  top: 30px;
  box-shadow: 4px 4px 6px 0px rgba(0, 0, 0, .16);
  min-width: 200px;
  border: 1px solid #ddd;
  text-align: initial;
  max-height: 210px;
  overflow: auto;
  display: none;
  z-index: 100;
}

.btn-dropdown li {
  padding: 6px;
  margin: 0px;
  border-bottom: 1px solid #ddd;
  cursor: pointer;
}

.btn-dropdown li:hover {
  background-color: #ddd;
}

.btn-dropdown li:last-child {
  border-bottom: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="dropdown">
  <button class="btn first">Select something</button>
  <ul class="btn-dropdown">
    <li>First</li>
    <li>Second</li>
    <li>Third</li>
    <li>Fourth</li>
  </ul>
</div>

<div class="dropdown">
  <button class="btn first">Select something</button>
  <ul class="btn-dropdown">
    <li>Black</li>
    <li>Brown</li>
    <li>Red</li>
    <li>Orange</li>
  </ul>
</div>

关于jquery - 当不透明度为零时,下拉列表项仍然可单击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46379591/

相关文章:

javascript - 在 Javascript/jQuery 中延迟打印列表中的内容

javascript - 当我从学习 JavaScript 转向学习 jquery 时

html - 截断 Bootstrap 网格中的文本

android - 如何使用 useragent css 定位 Samsung Galaxy Tab S3?

html - Bootstrap 和垂直文本 - 无法正常工作

javascript - 需要加载更多按钮以将所有元素向下移动页面

jquery - 更改突出显示效果、Rails、jQuery UI、CoffeeScript 中的文本颜色

html - 无法使用 NodeJS 加载 CSS

javascript - 动态创建 Div 并使用参数设置其 onclick 事件

javascript - Div 是不可见的,但会响应触摸