如何捕获Bootstrap导航栏下拉事件?

时间:2015-01-30 14:35:32

标签: javascript jquery html twitter-bootstrap events

我使用基本的Twitter Bootstrap导航栏作为我的菜单,现在我想在Stackoverflow上的系统灵感来自下拉列表中显示通知。为了实现这一点,我想在点击下拉列表时调用api,我需要" catch"下拉事件。根据{{​​3}},我需要抓住这样的事件:

$('#myDropdown').on('show.bs.dropdown', function () {
  // do something…
})

所以我有一个the docs,但是当我在自己的html中使用完全相同的代码(见下文)时,它已经不再适用了。有谁知道下面的代码有什么问题:

<!DOCTYPE html>
<html lang="en">
<head>    
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">

    <!-- jQuery -->
    <script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>

    <!-- Bootstrap -->
    <link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet">
    <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>

    <script type="text/javascript">
        $('#jajaja').on('show.bs.dropdown', function () {
            alert('Come on lets show the dropdown!!');
        });
    </script>
</head>
<body>
<div class="container">
    <div class="row">
        <div class="navbar navbar-default" role="navigation">
            <div class="container-fluid">
                <div class="navbar-header">
                    <a class="navbar-brand" href="/">My Website</a>
                </div>
                <div id="navbar" class="navbar-collapse">
                    <ul class="nav navbar-nav navbar-right" id="jajaja">
                        <li class="dropdown">
                            <a href="" id="notifications-header" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Notifications <span class="caret"></span></a>
                            <ul id="notifications" class="dropdown-menu" role="menu">
                                <li><span class="glyphicon glyphicon-refresh text-center" aria-hidden="true"></span></li>
                            </ul>
                        </li>
                    </ul>
                </div>
            </div>
        </div>
    </div>
</div>
</body>
</html>

1 个答案:

答案 0 :(得分:4)

为什么它在jsfiddle中起作用?

这是因为您使用onload加载了javascript代码。请参阅左下角的onload选项。

为什么它不能在我的网站上运行?

因为你把代码放在头脑中而且你不要等到dom准备就绪。

我该如何解决这个问题?

检查dom是否准备就绪。可以这样做:

$(document).ready(function() {
    $('#jajaja').on('show.bs.dropdown', function () {
        alert('Come on lets show the dropdown!!');
    });
});

或简而言之:

$(function() {
    $('#jajaja').on('show.bs.dropdown', function () {
        alert('Come on lets show the dropdown!!');
    });
});

其他良好做法是在关闭正文</body>之前放置所有javascript。