Обработчики событий для выпадающих списков Bootstrap Twitter?
Я хотел бы использовать кнопку 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 для обработки действий пользователя? Я начинаю задаваться вопросом, предназначены ли они только для навигации - это путает, что в примере приведен список действий.
Ответы
Ответ 1
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();
});
Ответ 2
Попробуйте следующее:
$('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;
});
Ответ 3
В Bootstrap 3 'dropdown.js' предоставляет нам различные события, которые запускаются.
click.bs.dropdown
show.bs.dropdown
shown.bs.dropdown
и т.д.
Ответ 4
Вот пример того, как вы можете реализовать пользовательские функции для ваших якорей.
http://jsfiddle.net/CH2NZ/43/
Вы можете прикрепить идентификатор к своему якорю:
<li><a id="alertMe" href="#">Action</a></li>
И затем используйте jQuery клик для прослушивания событий, чтобы прослушать действие click и запустить функцию:
$('#alertMe').click(function(e) {
alert('alerted');
e.preventDefault();// prevent the default anchor functionality
});
Ответ 5
Я смотрел на это. При заполнении выпадающих якорей я дал им атрибуты класса и данных, поэтому, когда вам нужно сделать какое-либо действие, вы можете сделать:
<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"));
});
Итак, если у вас есть динамически создаваемые элементы списка в раскрывающемся списке и вам нужно использовать данные, которые являются не только текстовым значением элемента, вы можете использовать атрибуты данных при создании раскрывающегося списка, а затем просто указывать каждый элемент с помощью класса, а не ссылаться на идентификатор каждого элемента и генерировать событие щелчка.
Ответ 6
Любой, кто ищет инновационную 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 -->
Обратите внимание, что элемент наблюдаемого массива неявно передается в щелкните функцию функции для использования в коде модели просмотра.
Ответ 7
Без необходимости менять группу кнопок, вы можете сделать следующее. Ниже я предполагаю, что ваш dropdown button
имеет id
of 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
fldCategory
, это фактически более эффективный 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>