【问题标题】:Open a dropdown menu when it receives focus via Jquery通过 Jquery 获得焦点时打开下拉菜单
【发布时间】:2016-01-12 19:31:52
【问题描述】:

所以我有一个带有几个下拉菜单的导航栏。长话短说,它被硬编码到我们的网站中,我们需要找到一种无需鼠标即可触发这些下拉菜单的方法。我已经尝试过其他方法,但现在我想使用这个:

作为盲人用户通过菜单选项卡,我希望下拉菜单在获得焦点时打开。我相信我只需要正确的语法来实际触发它,但我找不到它。我正在使用这个 jquery:

$(document).ready(function () {
    $("#testF").on("focus",function() {
        $(this).dropdown("open");
    });
});

我的问题似乎在于 .navbar-toggle("open"); (语法错误) 我只是想弄清楚当它成为焦点时这个下拉菜单将如何打开?任何帮助将不胜感激,这里有一些下拉 HTML 以防万一:

<li class="dropdown">                                    
    <a id="testF" href="#" class="dropdown-toggle" data-toggle="dropdown">Courses<span class="caret" /></a>                                       
    <ul class="dropdown-menu" role="menu">
        <li>
             <a href="/home/BbDeepLink" target="_blank">All Courses (click here)</a>
        </li>

CSS:

/* Menu */
    .navbar-default .navbar-nav > li > a{
        color:#222;
    }
    .navbar-default .navbar-nav .open .dropdown-menu > li > a {
        color:#222;
        background-color:#fff;
    }
    .navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus {
        color:#fff;
        background-color:#5396b1;
    }
    .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
        color:#fff;
        background-color:#5396b1;
    }
    .dropdown-menu{
        padding:0px;
    }
}

@media (min-width: 781px) {
    ul.nav li.dropdown:hover > ul.dropdown-menu {
        display: block;
    }
    /* Fixes: The main menu hover/focus dropdown issue */
    .navbar-default .navbar-nav .open ul  {
        display:none;
    }
    .navbar-default .navbar-nav .open:hover ul {
        display:block;
    }
}

【问题讨论】:

  • 同时发布与您的下拉菜单关联的 CSS
  • 只使用.navbar-toggle()(无参数)。
  • 仍然没有运气,我已经编辑了问题以包含 CSS
  • 注意:下拉菜单会在鼠标悬停时打开,只是在键盘上按标签时没有反应

标签: javascript jquery twitter-bootstrap drop-down-menu


【解决方案1】:
$(document).ready(function () {
    $("#testF").on("focus",function() {
        $("#testF").click();
   });
});

【讨论】:

  • 请不要发布仅代码的答案。提供信息以支持您的代码。
  • 我真的很喜欢这种click 方法!
  • 使用此方法时出现 jQuery“超出最大调用堆栈大小”错误。
【解决方案2】:

受此启发:jQuery handing both focus and click on an element

这个想法是在标签或鼠标点击之后检测它是否是焦点。

var lastClick = null;
    $('#testF').mousedown(function (e) {
        lastClick = e.target;
    }).focus(function (e) {
        if (e.target != lastClick) {
            $(this).dropdown("toggle");
        }
        lastClick = null;

    });

希望这是您问题的可接受答案。

【讨论】:

    【解决方案3】:

    经过反复试验,我达到了我想要的结果(几乎,现在需要模糊,所以它不会保持打开状态,欢迎提示!)使用以下代码:

    $(document).ready(function () {
            $("#testF").on("focus",function() {
                $(this).next(".dropdown-menu").toggle()
    
            });
        });
    

    【讨论】:

      【解决方案4】:

      你可以试试这个。

      $("#testF").select2();
      $("#testF").next(".select2").find(".select2-selection").focus(function() {
          $("#testF").select2("open");
      });
      

      【讨论】:

        【解决方案5】:

        这是我的解决方案:

        $("#dropdownMenuButton").on("focus", elements => {
            var element = elements.currentTarget;
            $(element).dropdown("toggle");
        })
        <!DOCTYPE html>
        <html>
            <head lang="en">
                <meta charset="utf8">
                <title>Page Title</title>
                <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" integrity="sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB" crossorigin="anonymous">
            </head>
            <body>
                <main class="container">
                    <div class="row">
                        <div class="col-xl-12">
                            <h1>Teste de Menu</h1>
                            <div class="dropdown dropright">
                                    <button class="btn btn-outline-primary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                                        Menu
                                    </button>
                                    <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
                                        <a class="dropdown-item" href="#">Action</a>
                                        <a class="dropdown-item" href="#">Another action</a>
                                        <a class="dropdown-item" href="#">Something else here</a>
                                    </div>
                            https://stackoverflow.com/questions/33129942/open-a-dropdown-menu-when-it-receives-focus-via-jquery#    </div>
                        </div>
                    </div>
                    
                </main>
                <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
                <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
                <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js" integrity="sha384-smHYKdLADwkXOn1EmN1qk/HfnUcbVRZyYmZ4qpPea6sjB/pTJ0euyQp0Mk8ck+5T" crossorigin="anonymous"></script>      
            </body>
        </html>

        【讨论】:

          猜你喜欢
          • 2012-05-10
          • 2014-01-26
          • 1970-01-01
          • 2019-11-05
          • 1970-01-01
          • 1970-01-01
          • 2015-10-04
          • 2021-06-23
          • 2016-09-04
          相关资源
          最近更新 更多