Как я могу отобразить окно выбора списка (выпадающее меню) с помощью бутстрапа?
Есть ли что-либо из того, что поддерживает bootstrap, чтобы отобразить "обычный" флажок выпадающего списка дезактомов? То есть, где выпадающее поле представляет собой список значений, и если выбрано, заполнение содержимого окна списка?
Что-то похожее на эту функциональность?
http://bootstrapformhelpers.com/select/
![enter image description here]()
Ответы
Ответ 1
Bootstrap 3 использует класс .form-control
для компоновки форм.
<select class="form-control">
<option value="one">One</option>
<option value="two">Two</option>
<option value="three">Three</option>
<option value="four">Four</option>
<option value="five">Five</option>
</select>
http://getbootstrap.com/css/#forms-controls
Ответ 2
Другой вариант - сделать выпадающее меню Bootstrap, как выбрать, используя jQuery...
$(".dropdown-menu li a").click(function(){
var selText = $(this).text();
$(this).parents('.btn-group').find('.dropdown-toggle').html(selText+' <span class="caret"></span>');
});
http://www.bootply.com/b4NKREUPkN
Ответ 3
Скелли хороший и простой ответ теперь устарел с изменениями синтаксиса выпадающего списка в Bootstap. Вместо этого используйте это:
$(".dropdown-menu li a").click(function(){
var selText = $(this).text();
$(this).parents('.form-group').find('button[data-toggle="dropdown"]').html(selText+' <span class="caret"></span>');
});
Ответ 4
Тест: http://jsfiddle.net/brynner/hkwhaqsj/6/
HTML
<div class="input-group-btn select" id="select1">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-expanded="false"><span class="selected">One</span> <span class="caret"></span></button>
<ul class="dropdown-menu option" role="menu">
<li id="1"><a href="#">One</a></li>
<li id="2"><a href="#">Two</a></li>
</ul>
</div>
JQuery
$('body').on('click','.option li',function(){
var i = $(this).parents('.select').attr('id');
var v = $(this).children().text();
var o = $(this).attr('id');
$('#'+i+' .selected').attr('id',o);
$('#'+i+' .selected').text(v);
});
CSS
.select button {width:100%; text-align:left;}
.select .caret {position:absolute; right:10px; margin-top:10px;}
.select:last-child>.btn {border-top-left-radius:5px; border-bottom-left-radius:5px;}
.selected {padding-right:10px;}
.option {width:100%;}
Ответ 5
Другим вариантом может быть использование bootstrap select. Своими словами:
Пользовательский select/multiselect для Bootstrap с выпадающим меню кнопки, предназначенный для того, чтобы вести себя как обычный выбор Bootstrap.
Ответ 6
Другим способом без использования .form-control является следующее:
$(".dropdown-menu li a").click(function(){
$(this).parents(".btn-group").find('.btn').html($(this).text() + ' <span class="caret"></span>');
$(this).parents(".btn-group").find('.btn').val($(this).data('value'));
});
$(".dropdown-menu li a").click(function(){
$(this).parents(".btn-group").find('.btn').html($(this).text() + ' <span class="caret"></span>');
$(this).parents(".btn-group").find('.btn').val($(this).data('value'));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<link href="http://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet"/>
<script src="http://netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
<div class="btn-group">
<button type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Test <span class="caret"> </span>
</button>
<ul class="dropdown-menu">
<li><a href='#'>test 1</a></li>
<li><a href='#'>test 2</a></li>
<li><a href='#'>test 3</a></li>
</ul>
</div>
Ответ 7
Для кода Ben требуется, чтобы родительский div имел класс группы форм (я использовал btn-group), это немного другая версия, которая просто ищет ближайший div и может даже быть немного быстрее.
$(".dropdown-menu li a").click(function(){
var selText = $(this).text();
$(this).closest('div').find('button[data-toggle="dropdown"]').html(selText + ' <span class="caret"></span>');
});
Ответ 8
Bootstrap3 .form-control
классный, но для тех, кто любит или нуждается в раскрывающемся меню с кнопкой и опцией ul, вот обновленный код. Я редактировал код Стив, чтобы исправить прыжок к хеш-ссылке и закрыть раскрывающийся список после выбора.
Спасибо Стиву, Бену и Скелли!
$(".dropdown-menu li a").click(function () {
var selText = $(this).text();
$(this).closest('div').find('button[data-toggle="dropdown"]').html(selText + ' <span class="caret"></span>');
$(this).closest('.dropdown').removeClass("open");
return false;
});
Ответ 9
Сейчас я сражаюсь с выпадающими списками, и я хотел бы поделиться своими впечатлениями:
Существуют особые ситуации, в которых <select>
нельзя использовать и "эмулировать" с выпадающим списком.
Например, если вы хотите создать группы ввода начальной загрузки, например кнопки с выпадающими списками (см. http://getbootstrap.com/components/#input-groups-buttons-dropdowns). К сожалению, <select>
не поддерживается в группах ввода, он не будет отображаться должным образом.
Или кто-нибудь решил это уже?
Я был бы очень заинтересован в решении.
И чтобы сделать его еще более сложным, вы не можете использовать так просто $(this).text()
, чтобы поймать, какой пользователь был выбран в раскрывающемся списке, если вы используете глипиконы или шрифты, удивительные значки в качестве контента для выпадающего списка. Например: <li id="someId"><a href="#0"><i class="fa fa-minus"></i></a></li>
Поскольку в этом случае текст отсутствует, и если вы добавите его, он также будет отображаться в выпадающем элементе, и это нежелательно.
Я нашел два возможных решения:
1)
Используйте $(this).html()
для получения содержимого выбранного элемента <li>
, а затем для его изучения, но вы получите что-то вроде <a href="#0"><i class="fa fa-minus"></i></a>
, поэтому вам нужно сыграть с этим, чтобы извлечь то, что вам нужно.
2)
Используйте $(this).text()
и спрячьте текст в элементе в скрытом пространстве: <li id="someId"><a href="#0"><i class="fa fa-minus"><span class="hidden">text</span></i></a></li>
.
Для меня это простое и элегантное решение, вы можете разместить любой текст, который вам нужен, текст будет скрыт, и вам не нужно делать никаких преобразований результата $(this).html()
, как в варианте 1), чтобы получить то, что вам нужно.
Я надеюсь, что это ясно и может помочь кому-то: -)