Как сделать окно выбора списка (выпадающий список) с помощью начальной загрузки?

206

Есть ли что-нибудь из коробки, которую поддерживает bootstrap для отображения «обычного» дефолтного выпадающего списка выбора? То есть, где раскрывающийся список представляет собой список значений и, если он выбран, заполнить содержимое списка?

Что-то похожее на этот функционал?

http://bootstrapformhelpers.com/select/

введите описание изображения здесь

genxgeek
источник
20
Вы имеете в виду - getbootstrap.com/css/#forms-controls (в разделе « Выбор» )?
cheersjosh
Вот как нормально выбирает работу. Это список опций, вы выбираете один, и это становится значением. Чем отличается то, что вы спрашиваете?
Бурхан Халид
1
Теперь мне просто интересно, как я могу заменить этот придуманный значок выпадающего меню приятной на вид кареткой. :)
genxgeek
1
С getbootstrap.com: Избегайте использования здесь элементов <select>, так как они не могут быть полностью стилизованы в браузерах WebKit.
Stuartdotnet
14
Мне неловко от идеи игнорировать нативный контроль ради визуальной структуры. Я искренне удивлен, что у bootstrap нет лучшего решения с помощью <select>. в то время как начальная загрузка используется <ul>для выпадающих списков, это в конечном итоге вводит в заблуждение использование указанного тега. учитывая всю пышность JQuery в начальной загрузке, я удивляюсь, почему они не изменили карету для выбора сами. Это казалось бы гораздо более изящным решением, чем незаконное присвоение ul.
Джей Эдвардс

Ответы:

425

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

Baerkins
источник
Я оказался здесь, потому что мне нужен был Bootstrap для Elm без использования bootstrap.js. Основное визуальное различие между этим и «полным» решением для начальной загрузки (на которое ссылается @JonathanEdwards) состоит в том, что меню, которое появляется, является квадратным, менее симпатичным, как alertокно, которое предоставляет ваш браузер. Маленькая проблема на самом деле. Однако селектор без щелчка выглядит точно так же, как и Bootstrap.
Роберт
38

Другой вариант - сделать так, чтобы раскрывающийся список 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

Zim
источник
4
Полезно, когда вы не хотите форму. Спасибо.
Хорхе Лейтао
11

Хороший и простой ответ Скелли теперь устарел с изменениями в синтаксисе выпадающего меню в 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>');
});
Бен
источник
11

Тест: 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%;}
Бриннер Феррейра
источник
Используйте 'min-width' в классе '.select button' в соответствии с тем, что вам нужно.
Бриннер Феррейра
11

Другим вариантом может быть использование начальной загрузки . Своими словами:

Пользовательский выбор / множественный выбор для Bootstrap с использованием раскрывающегося списка кнопок, разработанный так, чтобы он вел себя как обычный выбор Bootstrap.

Ariel
источник
1
Делает именно то, что говорит, и доступно через CDN.
scharfmn
5

Другой способ без использования .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>

omabra
источник
3

Код Бена требует, чтобы у родительского 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>');
});
Стив Хокинс
источник
1

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;
});
Arun
источник
1

В настоящее время я борюсь с выпадающими, и я хотел бы поделиться своим опытом:

Есть конкретные ситуации, когда <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), чтобы получить то, что вам нужно.

Надеюсь, это понятно и может кому-нибудь помочь :-)

Петр Панек
источник