Я хочу использовать раскрывающуюся кнопку Twitter Bootstrap :
<div class="btn-group">
<button class="btn dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button>
<ul class="dropdown-menu">
<li><a href="#">Action</a></li>
<li><a href="#">Another action</a></li>
<li><a href="#">Something else here</a></li>
</ul>
</div><!-- /btn-group -->
Когда пользователь меняет значение кнопки на «Другое действие», вместо того, чтобы просто переходить к нему #
, я действительно хотел бы обработать действие индивидуальным образом.
Но я не вижу никаких обработчиков событий в раскрывающемся плагине для этого.
Можно ли использовать раскрывающиеся кнопки Bootstrap для обработки действий пользователя? Я начинаю задаваться вопросом, предназначены ли они только для навигации - сбивает с толку то, что в примере приводится список действий.
javascript
twitter-bootstrap
Ричард
источник
источник
Ответы:
Загрузочная программа Twitter предназначена для обеспечения базовой функциональности и предоставляет только базовые плагины javascript, которые что-то делают на экране . Любой дополнительный контент или функциональность вам придется делать самостоятельно.
<div class="btn-group"> <button class="btn dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button> <ul class="dropdown-menu"> <li><a href="#" id="action-1">Action</a></li> <li><a href="#" id="action-2">Another action</a></li> <li><a href="#" id="action-3">Something else here</a></li> </ul> </div><!-- /btn-group -->
а затем с помощью jQuery
jQuery("#action-1").click(function(e){ //do something e.preventDefault(); });
источник
Попробуй это:
$('div.btn-group ul.dropdown-menu li a').click(function (e) { var $div = $(this).parent().parent().parent(); var $btn = $div.find('button'); $btn.html($(this).text() + ' <span class="caret"></span>'); $div.removeClass('open'); e.preventDefault(); return false; });
источник
В Bootstrap 3 dropdown.js предоставляет нам различные запускаемые события.
так далее
источник
Вот рабочий пример того, как вы можете реализовать пользовательские функции для своих якорей.
http://jsfiddle.net/CH2NZ/43/
Вы можете прикрепить идентификатор к своей привязке:
<li><a id="alertMe" href="#">Action</a></li>
А затем используйте прослушиватель событий щелчка jQuery, чтобы прослушать действие щелчка и запустить вашу функцию:
$('#alertMe').click(function(e) { alert('alerted'); e.preventDefault();// prevent the default anchor functionality });
источник
Я смотрел на это. При заполнении выпадающих якорей я дал им атрибуты класса и данных, поэтому, когда вам нужно выполнить действие, вы можете сделать:
<li><a class="dropDownListItem" data-name="Fred Smith" href="#">Fred</a></li>
а затем в jQuery сделать что-то вроде:
$('.dropDownListItem').click(function(e) { var name = e.currentTarget; console.log(name.getAttribute("data-name")); });
Поэтому, если у вас есть динамически сгенерированные элементы списка в раскрывающемся списке и вам нужно использовать данные, которые не просто текстовое значение элемента, вы можете использовать атрибуты данных при создании элемента раскрывающегося списка, а затем просто дать каждому элементу с классом событие, вместо того, чтобы ссылаться на идентификаторы каждого элемента и генерировать событие щелчка.
источник
Всем, кто ищет интеграцию с Knockout JS.
Учитывая следующий HTML-код (раскрывающаяся кнопка Standard Bootstrap):
<div class="dropdown"> <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"> Select an item <span class="caret"></span> </button> <ul class="dropdown-menu" role="menu"> <li> <a href="javascript:;" data-bind="click: clickTest">Click 1</a> </li> <li> <a href="javascript:;" data-bind="click: clickTest">Click 2</a> </li> <li> <a href="javascript:;" data-bind="click: clickTest">Click 3</a> </li> </ul> </div>
Используйте следующий JS:
var viewModel = function(){ var self = this; self.clickTest = function(){ alert("I've been clicked!"); } };
Для тех, кто хочет создать параметры раскрывающегося списка на основе наблюдаемого массива нокаутов, код будет выглядеть примерно так:
var viewModel = function(){ var self = this; self.dropdownOptions = ko.observableArray([ { id: 1, label: "Click 1" }, { id: 2, label: "Click 2" }, { id: 3, label: "Click 3" } ]) self.clickTest = function(item){ alert("Item with id:" + item.id + " was clicked!"); } }; <!-- REST OF DD CODE --> <ul class="dropdown-menu" role="menu"> <!-- ko foreach: { data: dropdownOptions, as: 'option' } --> <li> <a href="javascript:;" data-bind="click: $parent.clickTest, text: option.clickTest"></a> </li> <!-- /ko --> </ul> <!-- REST OF DD CODE -->
источник
Не изменяя группу кнопок вообще, вы можете сделать следующее. Ниже я предполагаю, что в вашем раскрывающемся списке
button
естьid
изfldCategory
.<script type="text/javascript"> $(document).ready(function(){ $('#fldCategory').parent().find('UL LI A').click(function (e) { var sVal = e.currentTarget.text; $('#fldCategory').html(sVal + ' <span class="caret"></span>'); console.log(sVal); }); }); </script>
Теперь, если вы установите для
.btn-group
самого этого элемента значениеid
offldCategory
, это на самом деле более эффективный jQuery и работает немного быстрее:<script type="text/javascript"> $(document).ready(function(){ $('#fldCategory UL LI A').click(function (e) { var sVal = e.currentTarget.text; $('#fldCategory BUTTON').html(sVal + ' <span class="caret"></span>'); console.log(sVal); }); }); </script>
источник