Bootstrap 下拉菜单 - 如果搜索栏被聚焦,则保持打开状态

Posted

技术标签:

【中文标题】Bootstrap 下拉菜单 - 如果搜索栏被聚焦,则保持打开状态【英文标题】:Bootstrap dropdown menu – stay open if search bar is focused 【发布时间】:2013-09-07 01:14:02 【问题描述】:

我正在尝试创建一个自定义的引导下拉菜单,该菜单在悬停时打开和关闭(我正在工作),但如果搜索栏聚焦在事件下拉菜单中,它也会保持打开状态,直到它失去焦点或用户点击离开从下拉列表中。

这是我的js代码:

$('ul.nav li.dropdown').hover(function() 
 $(this).closest('.dropdown-menu').show(); $(this).addClass('open'); ,
 function()  
    $("#search-query").focusin(function() 
        $('.events').addClass('search-active'); 
    );
    if ($('.events').hasClass('search-active')) 
        return;
     else 
        $(this).closest('.dropdown-menu').hide(); $(this).removeClass('open'); 
    
 );

这是一个代码笔,因此您可以查看我的其余代码:http://codepen.io/webinsation/pen/bfDsB

我尝试了几种不同的方法来使用 jquery 的 is(':focus') 选择器来解决这个问题,但没有结果。

感谢您提供的任何帮助或想法。 谢谢, – 迦勒

【问题讨论】:

当我点击搜索栏并将鼠标移开时,它保持打开状态。当我点击离开时,它就消失了。 尝试“bootply”作为 jsfiddle 的替代品(将来) 【参考方案1】:

您可以使用:focus 在第二个hover 函数中查找搜索框是否有焦点,而无需给任何东西附加事件。 .size() 将返回 1 如果它有焦点,否则返回 0,然后 ! 在否定之前将它们分别转换为 true 和 false。然后在第一个悬停功能中,在打开之前检查以确保当前没有打开的菜单。

$('ul.nav li.dropdown').hover(function() 
  if (!$(".dropdown-menu:visible").size()) 
     $(this).closest('.dropdown-menu').show(); $(this).addClass('open');
   
  ,
 function()  
   if (!$(".navbar-search input:focus").size()) 
     $(this).closest('.dropdown-menu').hide(); $(this).removeClass('open'); 
   
 );

CodePen demo

【讨论】:

感谢您的意见@Joe!现在唯一的问题是,如果在搜索栏(输入)具有焦点时将它们悬停,我的其他菜单仍将打开(并且卡在打开状态)。我需要使其他菜单无法打开,除非在搜索栏聚焦时单击它们。 是的,我之前应该包含这个,抱歉。我已经更新它来解决这个问题。 谢谢,唯一的问题是您的修复破坏了我实际站点上的悬停行为。您真正需要的是在显示其他菜单之前检查 .events 下拉菜单是否不可见。如果您不介意,我将使用最终代码编辑您的答案,然后将其标记为已回答。 看起来您的编辑被拒绝了,可能是因为当前答案解决了问题中所述的问题。无论有没有.events,它在 CodePen 中的工作方式都是一样的。 是的,在 codepen 中的工作方式相同,但在生产中,事情变得一团糟。它必须是“.events .dropdown-menu:visible”。无论如何,谢谢你的帮助!【参考方案2】:

我会试试看的。

我使用了hover() 函数,它是回调函数。

function () 
    if (!$("#search-query").is(':focus'))
        $(this).removeClass('open');
     else if ( !$( '.events' ).is( ':hover' ) ) 
        $("#search-query").blur();
        $('.dropdown-menu').hide();
    
);

悬停时几乎相同,您可以将其设置回最接近的位置。

在回调(无悬停)时,我检查 .events 是否悬停(因此它会显示其他每个菜单项下拉菜单,并在悬停移除时隐藏 .events 菜单。(您可以如果需要,将其设置为单击)。

这是Fiddle,希望对您有所帮助。

【讨论】:

感谢您回答 Shahar,但上面的答案正是我想要的。感谢您的帮助。

以上是关于Bootstrap 下拉菜单 - 如果搜索栏被聚焦,则保持打开状态的主要内容,如果未能解决你的问题,请参考以下文章

使用 Bootstrap Selectpicker 的搜索框下拉菜单不起作用

Bootstrap 多选下拉菜单,在 Rails 上带有搜索栏

Bootstrap 4:如何创建一个带有手风琴的下拉菜单?

Bootstrap 下拉菜单在 Android 上不起作用

Bootstrap - 移动菜单中的下拉菜单打开正常,无法关闭下拉菜单

Bootstrap 下拉菜单文本颜色