Динамическое выпадающее меню с начальной загрузкой не работает

#javascript #html

#javascript #jquery #twitter-bootstrap

Вопрос:

Я уже некоторое время использую bootstrap и столкнулся с проблемой при попытке динамического добавления выпадающего меню.

Это тот JavaScript, который у меня есть:

 $(document).ready(function() {
 $("#clickHere").click(function(){
        $("#appendHere").html("<div class="dropdown" style="display:inline;"><a id="drop1" href="#" class="dropdown-toggle" data-toggle="dropdown"><b class="caret"></b></a><ul class="dropdown-menu pull-left"><li><button>Analyse Now</button></li><li class="divider"></li><li><button>Analyse Later</button></li></ul></div>");
 });

 $('#drop1').on('click', function(e){
  e.stopPropagation();
  $(".dropdown-toggle").dropdown('toggle');
 });
});
  

Вот HTML:

 <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu" style="display: block; position: static; margin-bottom: 5px; *width: 180px;">
    <li><a tabindex="-1" href="#">Action</a></li>
    <li><a tabindex="-1" href="#">Another action</a></li>
    <li><a tabindex="-1" href="#">Something else here</a></li>
    <li class="divider"></li>
    <li class="dropdown-submenu pull-left"> <a tabindex="-1" href="#">More options</a>
        <ul class="dropdown-menu" id="mainMenu">
            <li><a tabindex="-1" href="#">Second level link</a></li>
            <li><a tabindex="-1" href="#">Second level link</a></li>
            <li><a tabindex="-1" href="#">Second level link</a></li>
            <li><a tabindex="-1" href="#">Second level link</a></li>
            <li><a tabindex="-1" href="#">Second level link</a></li>
        </ul>
    </li>
</ul>

<button id="clickHere">Click here </button>
<div id="appendHere"></div>
  

Вот скрипка
http://jsfiddle.net/szx4Y/83 /

Выпадающий список, добавляемый динамически, не работает должным образом. Мне удалось заставить его работать в моем коде, но в любом случае он появляется только один раз.

Кто-нибудь может мне помочь?

Спасибо!

Комментарии:

1. @MilchePatern — элемент привязки имеет класс dropdown-toggle . Селектор действителен.

2. Не могли бы вы быть более понятными?

Ответ №1:

Вот рабочий jsFiddle: http://jsfiddle.net/szx4Y/85 /.

К вашему сведению, ваш jsFiddle не работал, потому что вы не включили файл сценария начальной загрузки. Так что, если бы вы проводили там какое-либо тестирование, это бы не сработало.

Я изменил ваш код на вызов $(".dropdown-toggle").dropdown(); сразу после добавления вашего HTML. Вызывая этот метод, вы настраиваете элементы для обработки всех функций начальной загрузки (события щелчка и т. Д.); Нет причин вызывать его каждый раз, когда вы нажимаете на свой новый элемент.

Соответствующий код

HTML

 <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu" style="display: block; position: static; margin-bottom: 5px; *width: 180px;">
    <li><a tabindex="-1" href="#">Action</a></li>
    <li><a tabindex="-1" href="#">Another action</a></li>
    <li><a tabindex="-1" href="#">Something else here</a></li>
    <li class="divider"></li>
    <li class="dropdown-submenu pull-left"> <a tabindex="-1" href="#">More options</a>
        <ul class="dropdown-menu" id="mainMenu">
            <li><a tabindex="-1" href="#">Second level link</a></li>
            <li><a tabindex="-1" href="#">Second level link</a></li>
            <li><a tabindex="-1" href="#">Second level link</a></li>
            <li><a tabindex="-1" href="#">Second level link</a></li>
            <li><a tabindex="-1" href="#">Second level link</a></li>
        </ul>
    </li>
</ul>

<button id="clickHere">Click here </button>
<div id="appendHere"></div>
  

Javascript

 $(document).ready(function() {
    $("#clickHere").click(function(){
            $("#appendHere").html("<div class="dropdown" style="display:inline;"><a id="drop1" href="#" class="dropdown-toggle" data-toggle="dropdown"><b class="caret"></b></a><ul class="dropdown-menu pull-left"><li><button>Analyse Now</button></li><li class="divider"></li><li><button>Analyse Later</button></li></ul></div>");
    });

    $('.dropdown-toggle').dropdown();
});
  

CSS

 .dropdown-menu {
    float:right;
}
  

Комментарии:

1. Я хотел бы упомянуть, что вам вообще не нужно вызывать $('.dropdown-toggle').dropdown(); , и он все равно будет работать нормально. Вызов его один раз в событии ready все равно ничего не дает, потому .dropdown-toggle что на момент вызова не существует элемента с классом.

2. Могу ли я добавить содержимое HTML в выпадающий список и использовать его как модальный диалог?