8.3.2 使用JS触发下拉菜单

8.3.2 使用JS触发下拉菜单

如果希望通过JS展开下拉菜单,可调用下拉菜单的dropdown()方法,该方法有两个用法。

  1. 不传入参数:该方法默认打开下拉菜单。
  2. 传入'toggle'字符串参数:该字符串参数用于控制下拉菜单在打开或收起状态之间切换。

如下代码示范了如何使用JS触发下拉菜单。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<!DOCTYPE html>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title> 触发下拉菜单 </title>
<link rel="stylesheet" href="../bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="../bootstrap/css/bootstrap-theme.min.css">
<script type="text/javascript" src="../jquery-3.1.1.js"></script>
<script type="text/javascript" src="../bootstrap/js/bootstrap.min.js"></script>
</head>

<body>
<div class="container">
<!-- 第1个按钮 -->
<button type="button" class="btn btn-primary">给下拉菜单注册展开方法</button>
<!-- 普通下拉菜单 -->
<div class="dropdown">
<!-- 下拉菜单的 触发按钮 -->
<a class="btn btn-default dropdown-toggle" type="button" aria-haspopup="true" aria-expanded="true"
id="dropMenu">
下拉菜单的触发按钮
<span class="caret"></span>
</a>
<!-- 菜单 -->
<ul class="dropdown-menu">
<li><a href="#">新建</a></li>
<li><a href="#">打开</a></li>
<li><a href="#">保存</a></li>
<li role="separator" class="divider"></li>
<li><a href="#">退出</a></li>
</ul>
</div>
</div>
<script type="text/javascript">
// filter(表达式):从jQuery对象中返回匹配表达式的DOM元素,删除不匹配的DOM元素
// 点击第1个按钮时
$(".btn").filter(".btn-primary").click(function () {
// 给下拉列表的 触发按钮 注册展开方法
// 1号代码
$("#dropMenu").dropdown();
});
</script>
</body>

</html>

上面程序中第二个按钮上没有data-toggle="dropdown"属性,因此用户直接单击第二个按钮时不会展开下拉菜单。
这个时候需要给下拉菜单的触发按钮注册展开方法,这通过在触发按钮上调用dropdown()方法实现。
运行程序,先点击第1个按钮,把dropdown()方法绑定到下拉菜单的触发按钮上,然后才可以通过点击这个触发按钮展开下拉菜单.

JS展开下拉菜单步骤

上面的代码中给触发按钮注册dropdown()方法后,下拉菜单的触发按钮只能展开下来菜单,之后再次点击触发按钮,无法关闭下来菜单。实际上这样做并没有什么意义,仅仅只是方便我们更好地了解通过JS触发下拉菜单的原理:
要先在下拉菜单的触发按钮上调用dropdown()方法进行注册,然后该触发按钮才可以展开菜单.

读者小蓝注

通过JS好像只能展开下拉菜单,展开后好像还无法收起下拉菜单。
如果要支持收起菜单,一定要在触发按钮上添加data-toggle="dropdown"属性,但是问题就是,如果添加了该属性,则直接点击触发按钮就可以展开或者收起下拉菜单了.也就没有JS什么事情了.所以还是不要使用JS来触发下来菜单的好,直接使用data-toggle="dropdown"属性即可.
注意,这个地方还存在疑惑,有空再弄清楚吧。