【问题标题】:Bootstrap 5: Error when showing dropdown via JavaScriptBootstrap 5:通过 JavaScript 显示下拉菜单时出错
【发布时间】:2021-07-13 00:44:13
【问题描述】:

我正在尝试通过 JS 显示下拉菜单。不幸的是,Bootstrap 5 中似乎有一个错误。 在此示例代码中,显示模态有效,但显示下拉列表会引发异常:Uncaught TypeError: Cannot read property 'classList' of undefined at _e.show (dropdown.js:140)

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/css/bootstrap.min.css">
</head>

<body>

<div id="testDropdown" class="dropdown">
    <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown">
        Dropdown button
    </button>
    <ul class="dropdown-menu">
        <li><a class="dropdown-item" href="#">Action</a></li>
        <li><a class="dropdown-item" href="#">Another action</a></li>
        <li><a class="dropdown-item" href="#">Something else here</a></li>
    </ul>
</div>

<div id="testModal" class="modal" tabindex="-1">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title">Modal title</h5>
                <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
            </div>
            <div class="modal-body">
                <p>Modal body text goes here.</p>
            </div>
        </div>
    </div>
</div>

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/js/bootstrap.bundle.min.js"></script>

<script>

    let testModal = document.getElementById("testModal");
    //new bootstrap.Modal(testModal).show(); //works

    let testDropdown = document.getElementById("testDropdown");
    new bootstrap.Dropdown(testDropdown).show(); //doesnt work

</script>

</body>
</html>

是我做错了什么还是这是一个错误?

提前致谢。

【问题讨论】:

    标签: javascript dropdown bootstrap-5


    【解决方案1】:

    元素应该是dropdown-trigger 而不是父dropdown...

    <div class="dropdown">
        <button class="btn btn-secondary dropdown-toggle" id="testDropdown" type="button" data-bs-toggle="dropdown"> Dropdown button </button>
        <ul class="dropdown-menu">
            <li><a class="dropdown-item" href="#">Action</a></li>
            <li><a class="dropdown-item" href="#">Another action</a></li>
            <li><a class="dropdown-item" href="#">Something else here</a></li>
        </ul>
    </div>
    

    Demo

    注意:Bootstrap 5 包含一个新的auto-close 选项。此必须设置为 false,以便以编程方式从下拉菜单的父级之外触发下拉菜单。

    【讨论】:

    • 感谢它的工作!但是在 Bootstrap 4 中可以在不使用切换按钮的情况下显示它,知道这在 Bootstrap 5 中是否可行?
    • 请接受答案,因为它解决了问题。你在 Bootstrap 4 中有一个这样的例子吗?它会使用 jQuery 而不是 vanilla JS?所有answers here show using the toggle
    • 在 Bootstrap 4 这工作:html:&lt;div class="dropdown"&gt;&lt;div id="DROPDOWN_SEARCH" class="dropdown-menu"&gt;&lt;/div&gt;&lt;/div&gt; js:$(document.getElementById("DROPDOWN_SEARCH")).dropdown('show');
    • 我找到了解决办法,详情见我的其他回答。
    【解决方案2】:

    我不用按钮就让它工作了:

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
    
        <title>Dropdown Test</title>
    
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css">
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.4.1/font/bootstrap-icons.css">
    </head>
    
    <body>
    
    <div class="container-fluid">
    
        <div class="row justify-content-center">
            <div class="w-75 mt-2">
    
                <div class="input-group">
                    <span class="input-group-text"><i class="bi bi-search"></i></span>
                    <input type="text" class="form-control" placeholder="Search for something">
                    <button class="btn btn-primary" type="button">Search</button>
                </div>
    
                <div class="dropdown">
                    <div data-bs-toggle="dropdown" id="DROPDOWN_SEARCH"></div>
                    <div class="dropdown-menu w-100">
                        <a class="dropdown-item" href="#">Result 1</a>
                        <a class="dropdown-item" href="#">Result 2</a>
                        <a class="dropdown-item" href="#">Result 3</a>
                    </div>
                </div>
    
            </div>
        </div>
    
    </div>
    
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js"></script>
    
    <script>
        let searchDropdown = new bootstrap.Dropdown("#DROPDOWN_SEARCH");
        searchDropdown.show();
    </script>
    
    </body>
    
    </html>

    【讨论】:

    • 这似乎不起作用。下拉菜单不可切换。
    • 运行上面的代码 sn-p 对我有用。你可能会遇到这个问题:stackoverflow.com/questions/10480697/… dropdown.show() 在 onclick 事件中不起作用,因为下拉菜单会立即关闭。
    猜你喜欢
    • 2022-09-29
    • 2018-11-14
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多