Раскрывающийся список Bootstrap закрывается при нажатии
я помещаю форму в раскрывающийся список bootstrap, но когда я нажимаю любое из полей в форме, раскрывающийся список исчезает. У меня есть этот кусок кода, но я не знаю, куда его поместить, чтобы предотвратить исчезновение выпадающего списка.
$(function test() {
// Setup drop down menu
$('.dropdown-toggle').dropdown();
// Fix input element click problem
$('.dropdown input, .dropdown label').click(function(e) {
e.stopPropagation();
});
});
может кто-нибудь, пожалуйста, скажите мне, где я должен положить это? Я пробовал в Bootstrap-выпадающем списке, я пробовал в HTML, но он все еще не работает.
9 ответов:
просто используйте этот пример.Это решение работает для меня.
<script type="text/javascript"> window.addEvent('domready',function() { Element.prototype.hide = function() { $(function () { // replace your tab id with myTab //<ul id="myTab" class="nav nav-tabs"> $('#myTab li:eq(1) a').tab('show'); }); }; }); </script>
надеюсь, что это поможет. Спасибо.
вы можете опустить выпадающий вызов все вместе, раскрывающийся список bootstrap работает без него. Убедитесь, что вы правильно упаковываете свой скрипт, вы можете включить его в заголовок или тело своей страницы, хотя лично я предпочитаю размещать его в теле своей страницы.
JS
<script type="text/javascript"> $('.dropdown-menu input, .dropdown-menu label').click(function(e) { e.stopPropagation(); }); </script>
прошло время с момента принятия ответа, но если вы хотите, чтобы раскрывающийся список был открыт, если он действует как своего рода диалог, лучший способ, я думаю, это:
$('.dropdown').dropdown().on("hide.bs.dropdown", function(e) { if ($.contains(dropdown, e.target)) { e.preventDefault(); //or return false; } });
Если вы хотите прекратить закрывать только некоторые из выпадающих меню, а не все из них, то просто добавьте дополнительный класс в свой блок ul:
<ul class="dropdown-menu keep-open-on-click">
и используйте этот код:
$(document).on('click', '.dropdown-menu', function(e) { if ($(this).hasClass('keep-open-on-click')) { e.stopPropagation(); } });
вам нужно остановить событие от пузырящегося вверх по дереву DOM:
$('.dropdown-menu').click(function(e) { e.stopPropagation(); });
событие.stopPropagation предотвращает событие от достижения узла, где оно в конечном итоге обрабатывается меню скрытия начальной загрузки.
это работает для моего (боковая боковая панель, открывающая простую ссылку с переключателем bootstrap)
$('.dropdown').find("a").not('.dropdown-toggle').on("click",function(e){ e.stopImmediatePropagation(); });
Спасибо за приведенный выше ответ, у меня была та же проблема с подменю под выпадающими меню. Используя вышеуказанное решение, я смог решить проблему и для этого.
$('.dropdown-menu .dropdown-submenu a[data-toggle="dropdown-submenu"]').click(function (e) { e.stopPropagation(); });
Put
<script type="text/javascript"> $('.dropdown-menu').click(function(e) { e.stopPropagation(); }); </script>
в исходном ответе удалите все классы и просто поставьте ".выпадающее меню " класс, это сработало для меня. у меня есть поле ввода внутри выпадающего меню.
Если вы посмотрите на нижнюю часть источников выпадающего виджета, вы увидите следующее:
$(document) .on('click.bs.dropdown.data-api', '.dropdown form', function(e) { e.stopPropagation() })
Итак, у вас есть следующие варианты:
- просто оберните свой выпадающий список с форма
- или вы можете добавить прослушиватель событий для события click .выпадающий список YOUR_SELECTOR
$(document) .on('click.my', '.dropdown some_selector', function(e) { e.stopPropagation() })