【问题标题】:Dynamically adding menu item won't toggle in sidebar-nav to Sb Admin 2动态添加菜单项不会在侧边栏导航中切换到 Sb Admin 2
【发布时间】:2017-06-29 18:08:46
【问题描述】:

我是引导程序和 JQuery 的新手。我在使用 SB Admin 2 引导程序时遇到问题。我已经剥离了一个示例(仪表板)页面,并动态地向侧边栏导航添加了一个菜单项。

问题是新菜单项不会切换/折叠。

下面是一个有效的侧边菜单html的sn-p。

 <nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0">
    <div class="navbar-header">
        <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
        </button>
        <a class="navbar-brand" href="#" id="navbar_brand">SB Admin v2.0</a>
    </div>
    <!-- /.navbar-header -->

    <ul class="nav navbar-top-links navbar-right">
        <li class="dropdown">
            <a class="dropdown-toggle" data-toggle="dropdown" href="#">
    <i class="fa fa-user fa-fw"></i> <i class="fa fa-caret-down"></i>
            </a>
            <ul class="dropdown-menu dropdown-user">
                <li>
        <a href="login.html"><i class="fa fa-sign-out fa-fw"></i> Logout</a>
                </li>
            </ul>
            <!-- /.dropdown-user -->
        </li>
        <!-- /.dropdown -->
    </ul>
    <!-- /.navbar-top-links -->

    <div class="navbar-default sidebar" role="navigation">
        <div class="sidebar-nav navbar-collapse">
            <ul class="nav" id="side-menu">
                <li>
                    <a href="index.html"><i class="fa fa-dashboard fa-fw"></i> Dashboard</a>
                </li>
                <li>
                    <a href="#"><i class="fa fa-files-o fa-fw"></i> Sample Pages<span class="fa arrow"></span></a>
                    <ul class="nav nav-second-level">
                        <li>
                            <a href="blank.html">Blank Page</a>
                        </li>
                        <li>
                            <a href="login.html">Login Page</a>
                        </li>
                    </ul>
                    <!-- /.nav-second-level -->
                </li>
            </ul>
        </div>
        <!-- /.sidebar-collapse -->
    </div>
    <!-- /.navbar-static-side -->
</nav>

为了动态添加新的菜单项,我添加了一个点击事件处理程序,如下所示。

$("#navbar_brand").click(function(){
    $("#side-menu").append('<li><a href="#"><i class="fa fa-files-o fa-fw"></i> TEST Pages<span class="fa arrow"></span></a><ul class="nav nav-second-level"><li><a href="blank.html">Blank Page</a></li><li><a href="login.html">Login Page</a></li></ul></li>');
});

新的菜单项出现,但不会像原来的 Samples Pages 菜单那样切换。有人可以帮忙吗?

TIA

* 更新 *

请在下面找到有问题的 html 文件。

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

<head>

    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">

    <title>SB Admin 2 - Bootstrap Admin Theme</title>

    <!-- Bootstrap Core CSS -->
    <link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">

    <!-- MetisMenu CSS -->
    <link href="vendor/metisMenu/metisMenu.min.css" rel="stylesheet">

    <!-- Custom CSS -->
    <link href="dist/css/sb-admin-2.css" rel="stylesheet">

    <!-- Morris Charts CSS -->
    <link href="vendor/morrisjs/morris.css" rel="stylesheet">

    <!-- Custom Fonts -->
    <link href="vendor/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css">

    <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
        <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
        <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
    <![endif]-->
</head>

<body>

    <div id="wrapper">

        <!-- Navigation -->
        <nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0">
            <div class="navbar-header">
                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand" href="#" id="navbar_brand">SB Admin v2.0</a>
            </div>
            <!-- /.navbar-header -->

            <ul class="nav navbar-top-links navbar-right">
                <li class="dropdown">
                    <a class="dropdown-toggle" data-toggle="dropdown" href="#">
                        <i class="fa fa-user fa-fw"></i> <i class="fa fa-caret-down"></i>
                    </a>
                    <ul class="dropdown-menu dropdown-user">
                        <li>
                            <a href="login.html"><i class="fa fa-sign-out fa-fw"></i> Logout</a>
                        </li>
                    </ul>
                    <!-- /.dropdown-user -->
                </li>
                <!-- /.dropdown -->
            </ul>
            <!-- /.navbar-top-links -->

            <div class="navbar-default sidebar" role="navigation">
                <div class="sidebar-nav navbar-collapse">
                    <ul class="nav" id="side-menu">
                        <li>
                            <a href="index.html"><i class="fa fa-dashboard fa-fw"></i> Dashboard</a>
                        </li>
                        <li>
                            <a href="#"><i class="fa fa-files-o fa-fw"></i> Sample Pages<span class="fa arrow"></span></a>
                            <ul class="nav nav-second-level">
                                <li>
                                    <a href="blank.html">Blank Page</a>
                                </li>
                                <li>
                                    <a href="login.html">Login Page</a>
                                </li>
                            </ul>
                            <!-- /.nav-second-level -->
                        </li>
                    </ul>
                </div>
                <!-- /.sidebar-collapse -->
            </div>
            <!-- /.navbar-static-side -->
        </nav>

        <div id="page-wrapper">
            <div class="row">
                <div class="col-lg-12">
                    <h1 class="page-header">Dashboard</h1>
                </div>
                <!-- /.col-lg-12 -->
            </div>
            <!-- /.row -->



            <div class="row">
                <div class="col-lg-6">
                    <div class="panel panel-default">
                        <div class="panel-heading">
                            Hover Rows
                        </div>
                        <!-- /.panel-heading -->
                        <div class="panel-body">
                            <div class="table-responsive">
                                <table class="table table-hover">
                                    <thead>
                                        <tr>
                                            <th>#</th>
                                            <th>First Name</th>
                                            <th>Last Name</th>
                                            <th>Username</th>
                                        </tr>
                                    </thead>
                                    <tbody>
                                        <tr>
                                            <td>1</td>
                                            <td>Mark</td>
                                            <td>Otto</td>
                                            <td>@mdo</td>
                                        </tr>
                                        <tr>
                                            <td>2</td>
                                            <td>Jacob</td>
                                            <td>Thornton</td>
                                            <td>@fat</td>
                                        </tr>
                                        <tr>
                                            <td>3</td>
                                            <td>Larry</td>
                                            <td>the Bird</td>
                                            <td>@twitter</td>
                                        </tr>
                                    </tbody>
                                </table>
                            </div>
                            <!-- /.table-responsive -->
                        </div>
                        <!-- /.panel-body -->
                    </div>
                    <!-- /.panel -->
                </div>
                <!-- /.col-lg-6 -->

            </div>
            <!-- /.row -->

        </div>
        <!-- /#page-wrapper -->


    </div>
    <!-- /#wrapper -->

    <!-- jQuery -->
    <script src="vendor/jquery/jquery.min.js"></script>

    <!-- Custom Theme JavaScript -->
    <script src="vendor/core/js/common.js"></script>    

    <!-- Metis Menu Plugin JavaScript -->
    <script src="vendor/metisMenu/metisMenu.min.js"></script>

    <!-- Custom Theme JavaScript -->
    <script src="dist/js/sb-admin-2.js"></script>

    <!-- Bootstrap Core JavaScript -->
    <script src="vendor/bootstrap/js/bootstrap.min.js"></script>


    <!-- Page Custom JavaScript code -->
    <script>

    $( window ).on('load', function() {
        console_log("page loadedd");

        $(window).ready(function(){
            console_log("page ready");

            // setup page
            $.pageInit();
        });     
    });

    $.pageInit = function() {

    }

    $("#navbar_brand").click(function(){
        console_log("test");

        $("#side-menu").append('<li><a href="#"><i class="fa fa-files-o fa-fw"></i> TEST Pages<span class="fa arrow"></span></a><ul class="nav nav-second-level"><li><a href="blank.html">Blank Page</a></li><li><a href="login.html">Login Page</a></li></ul></li>');


    });

    </script>
</body>
</html>

【问题讨论】:

  • 我可以看到您启动sidebar-nav 功能的代码吗?我相信它会在第一次阅读 JavaScript 时识别出 HTML 中存在的&lt;li&gt;s。但是,当您稍后动态添加新的&lt;li&gt; 时,尚未添加切换功能,因为它是在之后创建的。
  • 我已经根据需要用代码更新了上面的原始帖子。
  • 今天有同事指出了解决方法。在附加菜单项后添加以下内容 $('#side-menu').metisMenu();

标签: javascript jquery ajax twitter-bootstrap


【解决方案1】:

如果无法查看您正在使用的 JS 脚本内部,很难准确地判断 #side-menu 的功能是什么,但您需要注意 JavaScript 的工作顺序。这是您的浏览器正在执行的操作:

  1. 读取 HTML 文档。
  2. 加载和执行所有 .js 文件。在这里,您的插件正在寻找 #side-menu 并将功能应用到其现有的 2 个 &lt;li&gt; 子元素。
  3. 点击#navbar_brand 后,它会向#side-menu 添加第三个&lt;li&gt; 子级,但这个子级从未添加任何功能,因为这是在第2 步中添加的。

你有两个选择:

  1. 查看插件的功能,看看您是否可以在添加第三个&lt;li&gt; 孩子之后再次启动它。
  2. 将所有 3 个 &lt;li&gt;s 都内置到 HTML 文档中,但在 CSS 中为第 3 个 display: none。单击#navbar_brand 后,您可以通过将其样式更改为display: block 或任何您想要的方式来显示它。

【讨论】:

  • 理解你所说的。添加第三个孩子后,我将考虑尝试再次启动插件。我添加了包含 js 脚本的 git repo 的链接。 github.com/BlackrockDigital/startbootstrap-sb-admin-2
  • 感谢 Marco,我正在疯狂地寻找解决方案。如果有人能指出我重新启动插件的正确方向(使用 sb admin 2 引导程序更好),我将不胜感激:)
猜你喜欢
  • 2017-12-27
  • 2017-03-24
  • 1970-01-01
  • 2022-11-05
  • 1970-01-01
  • 2014-07-03
  • 2016-01-03
  • 2019-05-30
  • 2017-05-06
相关资源
最近更新 更多