javascript - 带有悬停的 jQuery 下拉菜单无法正常工作

标签 javascript jquery html css

我用 jQuery 创建了一个悬停下拉菜单。我使用 .mouseenter.mouseleave 事件。但问题是,当我离开悬停按钮时,内容区域不会隐藏。

HTML

<button data-drp-hover="mynewid">HOVER</button>
<div class="drp-content" data-drp-content="mynewid">
  <span>Item 1</span>
  <span>Item 1</span>
  <span>Item 1</span>
  <span>Item 1</span>
  <span>Item 1</span>
</div>

CSS

[data-drp-content] {
  display:none;
}
.drp-show[data-drp-content] {
  display: block;
}

JS

$("[data-drp-hover]").mouseenter(function(){
  var root =  $(this);
  var _drp_container = $(this).attr("data-drp-hover");
  var _drp_content = $('[data-drp-content="' + _drp_container + '"]');
  _drp_content.addClass("drp-show"); 
  _drp_content.siblings().removeClass("drp-show");

  $(document).click(function(event){
    _drp_content.removeClass("drp-show"); 
  });

  $(_drp_content).click(function(event){
    event.stopPropagation();
  });

  $(_drp_content).mouseleave(function(){
    var timer = setTimeout(function(){
      _drp_content.removeClass("drp-show");
    }, 1000);

    $(_drp_content).mouseenter(function(){
      clearTimeout(timer);
    });

  });
});

最佳答案

它确实会在一秒钟后隐藏,因为那里有一个计时器,删除计时器并且它工作正常这是一个 fiddle https://jsfiddle.net/5qn6pdv9/

这是更新后的js

$("[data-drp-hover]").mouseenter(function () {
    var root = $(this);
    var _drp_container = $(this).attr("data-drp-hover");
    var _drp_content = $('[data-drp-content="' + _drp_container + '"]');
    _drp_content.addClass("drp-show");
    _drp_content.siblings().removeClass("drp-show");
    $(document).click(function (event) {
        _drp_content.removeClass("drp-show");
    });
    $(_drp_content).click(function (event) {
        event.stopPropagation();
    });
    $(_drp_content).mouseleave(function () {

        _drp_content.removeClass("drp-show");

        $(_drp_content).mouseenter(function () {
            clearTimeout(timer);
        });
    });
});

关于javascript - 带有悬停的 jQuery 下拉菜单无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44707341/

相关文章:

javascript - 下拉菜单中的 Bootstrap 4 选项卡

javascript - jQuery animate "complete"回调触发太快

html - 当标题位于响应式 View 中的不同列中时,将标题移到图像上方

当与同一文件中的另一个 JavaScript 代码接触时,JavaScript/JQuery 代码不起作用

html - 在悬停 CSS 上调整 Div 大小

javascript - 如何使用 styled-components 将 Gatsby 链接组件的填充设置为 0px

javascript - 如何在react.js中隐藏我的源代码?

javascript - 了解使用 AngularJS promises,它们将如何帮助解决这个问题

jquery - 使用 jQuery 克隆和插入

javascript - 无法从本地网络中的其他设备访问在 mac 上运行的 http 服务器