.on('点击')不能很好地使用动态内容?

时间:2014-08-22 01:37:49

标签: javascript jquery twitter-bootstrap

所以我在这里有一些代码可以通过将其添加到具有header_default类的任何东西来动态生成引导程序导航栏。我的问题是我现在想要在动态导航栏上做一些。('点击')事件,尽管它并没有真正起作用。特别是当我按下导航栏的品牌部分时,我一直试图切换一些lorem ipsum。出于某种原因,开启('点击')警报会以这种方式正常运行,但没有别的办法。我已经尝试过.toggle(),. hide()和console.log(),但这些都不起作用。

我在同一个导航栏上测试了相同的点击事件代码,当时它不是由javascript生成的,而且工作正常。我仍然很擅长使用jquery / javascript,所以我和#39;我确定在这里犯了一个相当明显的错误。

我的HTML:

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

<head>
<meta charset="UTF-8">
  <!--stylesheets-->
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
  <title>Document</title>
</head>

<body>
  <div class="container">

    <!--Header-->
    <nav id="page" class="header_default"></nav>

    <!--Text-->
    <div class="body-text">
      <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Repellat autem dolorum, earum adipisci magni rem. Deserunt sed aut, ad neque cum nulla rem vitae quos ducimus esse voluptatibus maxime! Vel.</p>
    </div>

  </div>
</body>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="javascript.js"></script>
</html>

我的Javascript:

// Header
$(document).ready(function() {
    if($('#page').hasClass("header_default")) {
        $('<nav class="container header_default"><nav class="navbar navbar-default" role="navigation"><div class="navbar-header"><a class="navbar-brand" href="">Brand</a></div><div><ul class="nav navbar-nav"><li><a href="about.html">About</a></li><li><a href="contact.html">Contact</a></li><li><a href="privacy.html">Privacy Policy</a></li></ul></div></nav></nav>')
            .prependTo( $('#page') )
    } // append navbar
}); //document.ready

//Click event
$(document).on('click', '.navbar-brand', function() {
   $('p').toggle("slow");
});

.prependTo()只是:

<nav class="header_default">
  <nav class="navbar navbar-default" role="navigation">
    <div class="navbar-header">
      <a class="navbar-brand" href="#">Brand</a>
    </div>

    <div>
      <ul class="nav navbar-nav">
        <li><a href="about.html">About</a></li>
        <li><a href="contact.html">Contact</a></li>
        <li><a href="privacy.html">Privacy Policy</a></li>
      </ul>
    </div>
  </nav><!--navbar-default-->
</nav><!-- container -->

2 个答案:

答案 0 :(得分:2)

我也认为它与加载顺序有关。这是我尝试时的效果:

// Header
$(document).ready(function() {
    if($('#page').hasClass("header_default")) {
        $(longString)
            .prependTo( $('#page') )
    } // append navbar

    $('.navbar-brand').on('click', function() {
        $('p').toggle('slow');
    });

}); //document.ready

这是一个example JSFiddle

旁注:longString只是您想要prepend的内容。我还更改了longString以使所有链接指向#,因此JSFiddle可以很好地使用它。

答案 1 :(得分:1)

我认为您的问题是在元素完成准备就绪之前启动的点击事件。

$(document).ready(function() {
    if($('#page').hasClass("header_default")) {
        $('<nav class="container header_default"><nav class="navbar navbar-default" role="navigation"><div class="navbar-header"><a class="navbar-brand" href="">Brand</a></div><div><ul class="nav navbar-nav"><li><a href="about.html">About</a></li><li><a href="contact.html">Contact</a></li><li><a href="privacy.html">Privacy Policy</a></li></ul></div></nav></nav>').prependTo( $('#page') )
    } // append navbar

    /*--move to here---*/
    //Click event
    $(document).on('click', '.navbar-brand', function() {
       $('p').toggle("slow");
    });


}); //document.ready