Распространение запрета на загрузку Twitter в раскрывающемся меню

У меня есть раскрывающийся бутстрап twitter внутри div с плагином jOrgChart.

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

Это мой html:

<div id="chart">
<div class="node">
    <div class="btn-group">
        <a class="btn dropdown-toggle" data-toggle="dropdown" href="#">
        Actions
        <span class="caret"></span>
        </a>
        <ul class="dropdown-menu" style="text-align:left;">
            <li><a href="#">Edit</a></li>
            <li><a href="#">Delete</a></li>
        </ul>
    </div>
</div>

<div class="node">
...
</div>

Я хочу, чтобы нажимать кнопку a.dropdown-toggle от bubbling до div.node, я попытался с этим:

$("div#chart div.btn-group > a.dropdown-toggle").click(function (e) {
            e.stopPropagation();
        });

Но теперь выпадающее меню не работает.

ИЗМЕНИТЬ

Это конкретный случай: http://jsfiddle.net/UTYma/2/ (спасибо Джо Тускану за запуск скрипки)

Ответ 1

$("#orgchart").jOrgChart({ chartElement: '#chart' });

$("div#chart div.btn-group > a.dropdown-toggle, .dropdown-menu li a").click(function(e) {
    e.stopPropagation();
    $('.dropdown-menu').toggle();
});​

Остановить распространение, затем переключить. Пример


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

Ответ 2

Попробуйте что-то вроде этого:

$("div#chart div.btn-group > a.dropdown-toggle").click(function (e) {

            e.isDropDownToggleEvent =true;
})

Тогда:

$("div.node").click(function (e) {
     if (e.isDropDownToggleEvent != null && e.isDropDownToggleEvent)
         return false;

     return true;      
})

Вы также можете попробовать поставить e.preventDefault() или e.stopPropagation(); вместо return false.

Ответ 3

Я использовал

$('.multiselect').on('click', function (e) {
    $(this).next('.dropdown-menu').toggle();
    e.stopPropagation();
});

Это похоже на ответ @Joe, но немного более общий

Ответ 4

$("div#chart div.btn-group > a.dropdown-toggle, .dropdown-menu li a").click(function(e) {
    e.stopPropagation();
    $(this).closest('.dropdown').toggleClass('open');
});​

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

Ответ 5

Если я правильно понимаю, вы хотите избежать закрытия меню.

$("div#chart .dropdown-menu li").bind('click',function (e) {
            e.stopPropagation();
        },false);