如何以编程方式打开引导下拉列表
How to open Bootstrap dropdown programmatically
当我单击另一个下拉列表的项目时,我正在尝试打开引导下拉列表。
这个想法是从第一个下拉列表中选择一个城市 - 然后脚本将自动打开带有区域的第二个下拉列表(并仅显示与所选城市对应的区域)。
这是我的JS:
$('#sidebar_filter_city li').click(function(){
$('#sidebar_filter_areas').dropdown('toggle');
});
这是 HTML:
<div class="dropdown form-control">
<div data-toggle="dropdown" id="sidebar_filter_cities" class="sidebar_filter_menu" data-value="jersey-city">Jersey City<span class="caret caret_sidebar"></span></div>
<input type="hidden" name="advanced_city" value="jersey-city">
<ul id="sidebar_filter_city" class="dropdown-menu filter_menu" role="menu" aria-labelledby="sidebar_filter_cities">
<li role="presentation" data-value="">All Cities</li>
<li role="presentation" data-value="jersey-city">Jersey City</li>
<li role="presentation" data-value="london">London</li>
<li role="presentation" data-value="new-york">New York</li>
</ul>
</div>
</div>
<div class="dropdown form-control">
<div data-toggle="dropdown" id="sidebar_filter_areas" class="sidebar_filter_menu">All Areas<span class="caret caret_sidebar"></span> </div>
<input type="hidden" name="advanced_area" value="">
<ul id="sidebar_filter_area" class="dropdown-menu filter_menu" role="menu" aria-labelledby="sidebar_filter_areas">
<li role="presentation" data-value="">All Areas</li>
<li role="presentation" data-value="east-harlem" data-parentcity="">East Harlem</li>
<li role="presentation" data-value="greenville" data-parentcity="">Greenville</li>
<li role="presentation" data-value="manhattan" data-parentcity="">Manhattan</li>
<li role="presentation" data-value="northern-brooklyn" data-parentcity="">Northern Brooklyn</li>
.....
</ul>
</div>
</div>
最好的方法是检查下拉列表是否尚未打开,然后使用 .dropdown('toggle')
。
需要注意的几件事:
- 如果要通过单击另一个元素来触发它,则必须杀死另一个元素上的点击事件 - 否则引导程序将将其视为下拉列表外的单击,并立即将其关闭。
-
$('.dropdown').addClass('open')
不是$('.dropdown-toggle').dropdown('toggle')
如其他建议答案,因为它会导致下拉列表永久保持打开状态而不是在单击组件时关闭。
.HTML:
<button class="btn btn-secondary trigger_button">Trigger dropdown</button><br><br>
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button" data-toggle="dropdown">
Dropdown
</button>
<div class="dropdown-menu">
Stuff...
</div>
</div>
.JS:
$('.trigger_button').click(function(e){
// Kill click event:
e.stopPropagation();
// Toggle dropdown if not already visible:
if ($('.dropdown').find('.dropdown-menu').is(":hidden")){
$('.dropdown-toggle').dropdown('toggle');
}
});
小提琴示例
对于 Bootstrap 3,您只需将"open"类添加到下拉标签中即可。删除它会关闭下拉列表。
$('.dropdown').addClass('open'); // Opens the dropdown
$('.dropdown').removeClass('open'); // Closes it
这可能适用于其他版本,但我不确定。
Bootstrap的下拉插件等待'click.bs.dropdown'事件显示菜单,所以在这种情况下:
$('#sidebar_filter_areas').trigger('click.bs.dropdown');
应该工作。这不会触发同一元素上的其他"单击"事件(如果有)。
dropdown('toggle')
使用按钮标签时对我来说非常有用。
.JS
$("#mybutton").dropdown('toggle')
.HTML
<button class="dropdown-toggle ban" role="button" data-toggle="dropdown" data-target="#" id="mybutton">...</button>
您需要阻止点击事件冒泡到父元素
$('#sidebar_filter_city li').click(function(e){
$('#sidebar_filter_areas').dropdown('toggle');
e.stopPropagation();
});
您也可以使用return false;
来执行相同的操作,但这也会阻止单击默认。
如果绝对没有一个在做这个技巧,那么你可以做如下的事情:
$('.dropdown').addClass('open'); // substitute with your own selector
$('.dropdown-toggle').attr('aria-expanded', true).focus(); // substitute with your own selector
虽然上述方法可以工作,但我不建议使用它,因为它有点笨拙。
使用的东西,它有更多的用户期望的行为:
if(!$('#myDropdown').hasClass('show')){
$('#myDropdown').dropdown('toggle');
}
如果它已经打开,请不要执行任何操作。如果它已关闭,则它应该打开。
我有用。
$('.dropdown-toggle').click(function (ev) {
ev.stopPropagation();
$(this).parent().toggleClass('open');
});
标记:
<div class="dropdown pull-right">
<button class="btn btn-default dropdown-toggle task-actions" type="button"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
<img src="{{ asset('img/site/icons/menu.svg') }}" alt="Menu">
</button>
<ul id="dropdown-overview" class="dropdown-menu">
<li><a href="#">Action</a></li>
<li><a href="#">Another action</a></li>
<li><a href="#">Something else here</a></li>
<li role="separator" class="divider"></li>
<li><a href="#">Separated link</a></li>
</ul>
</div>
只需在数据切换元素上使用.click()
但不要忘记e.stopPropagation()
这简单的一句话花了我几个小时,希望它有帮助:)
如果您检查打开的下拉菜单,您可以看到选择器,该选择器更改下拉菜单的显示。在引导程序 v3.0.0 中,css 选择器是:
.open > .dropdown-menu {
display: block;
}
因此,应该将开放类添加到具有.dropdown菜单类的元素的父节点中。在其他版本中,如果它已被更改,则可能以相同的方式找到正确的选择器。
根据引导文档,您可以简单地使用它:
$('.dropdown-toggle').dropdown();
对于使用 Anuglar 6 的 Bootstrap 4,我使用了这个:
<div class="dropdown-menu" id='logoutDropDownMenu' x-placement="bottom-start" style="position: absolute; transform: translate3d(0px, 40px, 0px); top: 0px; left: 0px; will-change: transform;">
我的组件ts文件有这个功能
import { DOCUMENT } from '@angular/common';
import { Inject } from '@angular/core';
export class HomeComponent implements OnInit {
private toggleLogout: boolean;
constructor(@Inject(DOCUMENT) private document: any){}
toggleButton() {
if (this.toggleLogout) {
this.document.getElementById('logoutDropDownMenu').classList.add('show');
} else {
this.document.getElementById('logoutDropDownMenu').classList.remove('show');
}
this.toggleLogout = !this.toggleLogout;
}
试试这个:
$('#sidebar_filter_areas').click();
在 Bootstrap 4.x 中,需要影响以下组件:
- li> .nav-item .dropdown
- 一个> .nav-link> ARIA 扩展
- div> .下拉菜单
为这些类添加一个点击事件侦听器,该侦听器会触发切换类和布尔值,使下拉列表与纯 javascript 一起工作,如下所示:
let status = false
const nav = document.getElementsByClassName('nav-item dropdown')[0]
nav.addEventListener('click', toggleDropdown)
function toggleDropdown () {
if (status) {
nav.classList.add('show')
document.getElementsByClassName('nav-link dropdown-toggle')[0].setAttribute('aria-expanded', ' + status + ')
document.getElementsByClassName('dropdown-menu').classList.add('show')
} else {
nav.classList.remove('show')
document.getElementsByClassName('nav-link dropdown-toggle')[0].setAttribute('aria-expanded', ' + status + ')
document.getElementsByClassName('dropdown-menu').classList.remove('show')
}
return status = !status
}
你可以像这样使用 Native JavaScript 来实现同样的事情:
document.getElementById('XYZ').click('open');
它适用于所有浏览器。
大多数情况下充当手动操作:
$('#sidebar_filter_city li').click(function(){
$('#sidebar_filter_areas').click();
});
HTML中添加data-toggle="dropdown" id="dropbox"
,如下所示:
<div data-toggle="dropdown" id="dropbox"
在 JS/TS 中:
$('#dropbox').trigger('click.bs.dropdown');
如果你不想使用 jQuery
,那么Dropdown.toggle()
的普通JS
变体是:
# jQuery
$(elementThatTriggersDropdown).dropdown('toggle');
# js
let dropdown = new Dropdown(elementThatTriggersDropdown);
dropdown.toggle();
<小时 />不要忘记导入/使Dropdown
类的引导程序可用。
https://github.com/twbs/bootstrap/blob/v5.2.0/js/src/dropdown.js
例如:
import Dropdown from "bootstrap/js/src/dropdown";
我使用 jQuery 的方式 无需添加或删除它在引导程序 4 中内置的类
$(function () {
$('li.nav-item').hover(function () {
$(this).children('.dropdown-menu').addClass('show')
},
function () {
$(this).children('.dropdown-menu').removeClass("show");
});
});
如果你使用像AngularJS
这样的JS框架,你只需要在JS(conditionMenuIsOpen()
)中实现你的条件,并在HTML中display
dropdown-menu
的样式与这个条件绑定。当条件为 true 时,display
样式将从hidden
更改为block
,并显示下拉菜单。
<ul class="dropdown-menu" ng-style="vm.conditionMenuIsOpen() && {'display':'block'}">
...
</ul>
- 如何使用jQuery选择下拉列表的值
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- Javascript按钮下拉列表
- jQuery表单添加不适用于下拉列表
- 用每小时的差值填充数组/列表-从下拉列表中给定两个时间值
- 禁用jQuery中的下拉列表
- 如何在按钮中显示下拉列表中选定的元素
- 如何在从多选下拉列表中选择选项值时动态生成文本框
- 针对移动设备的JQuery下拉列表没有以应有的方式工作
- 将选项添加到插件msDropdown生成的下拉列表的最佳方式是什么
- 如何以编程方式单击下拉列表中的li
- 如何在 javascript onchange 应用 asp.net 时以编程方式更改下拉列表中的选定项
- Select2 以编程方式设置搜索词并打开包含相关结果的下拉列表(无 ajax 调用)
- 使用 Javascript/jQuery 以编程方式关闭 SELECT 下拉列表
- 当用户使用 ASP.NET 从 Web 窗体中的“下拉列表列表”中选择“其他”时,文本框的显示方式
- 将 HTML 表转换为下拉列表(或以其他方式获取带有列的选择标记)
- 如何在jquerymobile中以编程方式选择下拉列表的选项
- 如何使用D3.js在一个下拉列表中按照自然的方式安排日期
- 使用模板时,我如何以编程方式设置剑道下拉列表文本
- 如何以编程方式打开引导下拉列表