Jak mogę wygenerować pole wyboru listy (rozwijane) za pomocą bootstrap?

Czy jest coś, co obsługuje bootstrap, aby renderować" zwykłą " listę rozwijaną defacto? To znaczy, gdzie rozwijane pole jest listą wartości i jeśli jest zaznaczone, wypełnić zawartość listy?

Coś podobnego do tej funkcjonalności?

Http://bootstrapformhelpers.com/select/

Tutaj wpisz opis obrazka

Author: Jace Rhea, 2013-08-09

9 answers

Bootstrap 3 używa klasy .form-control do stylizacji komponentów formularza.

<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

 417
Author: Baerkins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-09 16:20:41

Inną opcją jest, aby rozwijane menu Bootstrap zachowywało się jak select przy użyciu 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

 38
Author: Zim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-01 17:30:32

Miła i łatwa odpowiedź Skelly ' ego jest teraz nieaktualna ze zmianami składni rozwijanej w Bootstapie. Zamiast tego użyj tego:

$(".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
Author: Ben Munson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-25 21:22:34

Test: 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%;}
 11
Author: Brynner Ferreira,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-19 16:24:38

Inną opcją może być użycie Bootstrap select. Na własne słowa:

Niestandardowe select / multiselect dla Bootstrap za pomocą rozwijanego przycisku, zaprojektowane tak, aby zachowywać się jak zwykłe selekcje Bootstrap.

 9
Author: Ariel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-20 16:15:31

Inny sposób bez użycia .form-control jest taki:

  $(".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>
 4
Author: omabra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-04 16:37:02

Kod Bena wymaga, aby rodzic div miał klasę form-group (używałem btn-group), jest to nieco inna wersja, która po prostu wyszukuje najbliższy div I może być nawet nieco szybsza.

$(".dropdown-menu li a").click(function(){
    var selText = $(this).text();
    $(this).closest('div').find('button[data-toggle="dropdown"]').html(selText + ' <span class="caret"></span>');
});
 3
Author: Steve Hawkins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-23 14:27:07

Bootstrap3 .form-control jest fajny, ale dla tych, którzy kochają lub potrzebują rozwijanego przycisku i opcji ul, oto zaktualizowany kod. Edytowałem Kod przez Steve ' a, aby naprawić przeskakiwanie do łącza hashowego i zamykanie rozwijanej listy po zaznaczeniu.

Dzięki Steve 'owi, Benowi i Skelly' emu!
$(".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;
});
 1
Author: Arun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-09 12:47:45

Obecnie walczę z spadkami i chciałbym podzielić się swoimi doświadczeniami:

Istnieją szczególne sytuacje, w których <select> nie może być używany i musi być "emulowany"z rozwijanym menu.

Na przykład, jeśli chcesz utworzyć grupy wejściowe bootstrap, takie jak przyciski z rozwijanymi (patrz http://getbootstrap.com/components/#input-groups-buttons-dropdowns). niestety <select> nie jest wspierane w grupach wejściowych, nie będzie renderowane poprawnie.

Czy ktoś już to rozwiązałeś? Byłbym bardzo zainteresowany rozwiązaniem.

I aby było jeszcze bardziej skomplikowane, nie możesz użyć tak po prostu $(this).text(), aby złapać użytkownika wybranego w rozwijanym menu, jeśli używasz glipicons lub font awesome icons jako zawartości do rozwijanego menu. Na przykład: <li id="someId"><a href="#0"><i class="fa fa-minus"></i></a></li> Ponieważ w tym przypadku nie ma tekstu i jeśli dodasz trochę to będzie również wyświetlany w rozwijanym elemencie i jest to niechciane.

Znalazłem dwa możliwe rozwiązania:

1) Użyj $(this).html(), Aby uzyskać zawartość wybranego elementu <li>, a następnie go zbadać, ale otrzymasz coś w rodzaju <a href="#0"><i class="fa fa-minus"></i></a>, więc musisz grać z tym, aby wyodrębnić to, czego potrzebujesz.

2) Użyj $(this).text() i ukryj tekst w elemencie w ukrytej rozpiętości: <li id="someId"><a href="#0"><i class="fa fa-minus"><span class="hidden">text</span></i></a></li>. Dla mnie jest to proste i eleganckie rozwiązanie, możesz umieścić dowolny tekst, tekst będzie ukryty i nie musisz robić żadnych przekształceń wyniku $(this).html(), jak w opcji 1), Aby uzyskać to, czego potrzebujesz.

Mam nadzieję, że to jasne i może komuś pomóc :-)

 1
Author: Petr Pánek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-29 15:59:22