Держать на Bootstrap выпадающее открыть по клику
Я использую раскрывающийся список bootstrap в качестве shoppingcart. В корзине есть кнопка "удалить товар" (Ссылка). Если я нажму на него, мой скрипт shoppingcart удалит продукт, но меню исчезнет. Есть ли способ предотвратить это? Я попробовал e. startPropagation, но это, похоже, не сработало:
<div id="shoppingcart" class="nav-collapse cart-collapse">
<ul class="nav pull-right">
<li class="dropdown open">
<a href="#" data-toggle="dropdown" class="dropdown-toggle">Totaal:
€ 43,00</a>
<ul class="dropdown-menu">
<li class="nav-header">Pakketten</li>
<li>
<span class="quantity">1x</span>
<span class="product-name">Test Product </span>
<span class="product-remove"><a class="removefromcart" packageid="4" href="#">x</a>
</span></li>
<li><a href="#">Total: € 43,00</a></li>
<li><a href="/checkout">Checkout</a></li>
</ul>
</li>
</ul>
Как вы можете видеть, что элемент с классом= "dropwdown-toggle"сделал его выпадающим. Другая идея заключалась в том, что я просто открываю его при нажатии программно. Так что если кто-то может объяснить мне, как программно открыть раскрывающийся список Bootstrap, это хорошо поможет!
6 ответов:
Попробуйте удалить распространение на самой кнопке так:
$('.dropdown-menu a.removefromcart').click(function(e) { e.stopPropagation(); });
Edit
вот демо из комментариев с решением выше:
http://jsfiddle.net/andresilich/E9mpu/
соответствующий код:
JS
$(".removefromcart").on("click", function(e){ var fadeDelete = $(this).parents('.product'); $(fadeDelete).fadeOut(function() { $(this).remove(); }); e.stopPropagation(); });
HTML
<div id="shoppingcart" class="nav-collapse cart-collapse"> <ul class="nav pull-right"> <li class="dropdown open"> <a href="#" data-toggle="dropdown" class="dropdown-toggle">Totaal: € 43,00</a> <ul class="dropdown-menu"> <li class="nav-header">Pakketten</li> <li class="product"> <span class="product-remove"><a class="removefromcart" packageid="2" href="#"><i class="icon-remove"></i></a></span> <span class="product-name">Test Product </span> <span class="quantity"><span class="badge badge-inverse">1</span></span> </li> <li class="product"> <span class="product-remove"><a class="removefromcart" packageid="2" href="#"><i class="icon-remove"></i></a></span> <span class="product-name">Test Product </span> <span class="quantity"><span class="badge badge-inverse">10</span></span> </li> <li class="product"> <span class="product-remove"><a class="removefromcart" packageid="2" href="#"><i class="icon-remove"></i></a></span> <span class="product-name">Test Product </span> <span class="quantity"><span class="badge badge-inverse">8</span></span> </li> <li class="product"> <span class="product-remove"><a class="removefromcart" packageid="2" href="#"><i class="icon-remove"></i></a></span> <span class="product-name">Test Product </span> <span class="quantity"><span class="badge badge-inverse">3</span></span> </li> <li class="product"> <span class="product-remove"><a class="removefromcart" packageid="2" href="#"><i class="icon-remove"></i></a></span> <span class="product-name">Test Product </span> <span class="quantity"><span class="badge badge-inverse">4</span></span> </li> <li class="divider"></li> <li><a href="#">Total: € 43,00</a></li> <li><a href="/checkout">Checkout</a></li> </ul> </li> </ul>
этот ответ - просто побочный комментарий к принятому ответу. Благодаря как OP, так и Andres для этого Q & A, он решил мою проблему. Однако позже мне понадобилось что-то, что работало с динамически добавляемыми элементами в моем раскрывающемся списке. Любой, кто сталкивается с этим, также может быть заинтересован в решении вариации Andres, которое работает как с начальными элементами, так и с элементами, добавленными в раскрывающийся список после загрузки страницы:
$(function() { $("ul.dropdown-menu").on("click", "[data-keepOpenOnClick]", function(e) { e.stopPropagation(); }); });
или, для динамически созданного выпадающего меню:
$(document).delegate("ul.dropdown-menu [data-keepOpenOnClick]", "click", function(e) { e.stopPropagation(); });
тогда просто поставьте
data-keepOpenOnClick
атрибут в любом месте в любом из<li>
теги или его дочерние элементы, в зависимости от вашей ситуации. Е. Г.:<ul class="dropdown-menu"> <li> <-- EG 1: Do not close when clicking on the link --> <a href="#" data-keepOpenOnClick> ... </a> </li> <li> <-- EG 2: Do not close when clicking the checkbox --> <input type="checkbox" data-keepOpenOnClick> Pizza </li> <-- EG 3: Do not close when clicking the entire LI --> <li data-keepOpenOnClick> ... </li> </ul>
короче говоря, вы можете попробовать это. Это работает на меня.
<span class="product-remove"> <a class="removefromcart" onclick=" event.stopPropagation();" packageid="4" href="#">x</a> </span>
у меня была такая же проблема с подменю аккордеона/переключения, которое было вложено в выпадающее меню в Bootstrap 3. Заимствовал этот синтаксис из исходный код чтобы остановить все свернуть переключатели от закрытия выпадающего списка:
$(document).on( 'click.bs.dropdown.data-api', '[data-toggle="collapse"]', function (e) { e.stopPropagation() } );
Вы можете заменить
[data-toggle="collapse"]
с тем, что вы хотите остановить закрытие формы, подобно тому, как @DonamiteIsTnt добавил свойство для этого.
Я написал несколько строк кода, которые делают его работает так же идеально, как нам нужно с большим количеством контроля над ним:
$(".dropdown_select").on('hidden.bs.dropdown', function () { if($(this).attr("keep-open") == "true") { $(this).addClass("open"); $(this).removeAttr("keep-open"); } }); $(".dropdown_select ul li").bind("click", function (e) { // DO WHATEVER YOU WANT $(".dropdown_select").attr("keep-open", true); });