如何使用引导程序呈现列表选择框(下拉列表)?


206

引导程序是否支持开箱即用的功能来呈现“常规”事实上的下拉列表选择框?也就是说,下拉框是值列表的位置,如果选中,则填充列表框的内容?

类似于此功能?

http://bootstrapformhelpers.com/select/

在此处输入图片说明


20
您是说-getbootstrap.com/css/#forms-controls(在“ 选择”下)吗?
cheersjosh

这就是正常选择的工作方式。它是一个选项列表,您选择一个即可成为值。您的要求有何不同?
Burhan Khalid

1
现在,我只是想知道如何用美观的插入符号替换该人为外观的下拉图标。:)
genxgeek

1
来自getbootstrap.com:避免在此处使用<select>元素,因为它们在WebKit浏览器中无法完全样式化。
stuartdotnet,2014年

14
我为视觉框架而忽略本地控件的想法感到不舒服。我真的很惊讶Bootstrap没有使用更好的解决方案<select>。引导程序<ul>用于下拉菜单时,最终会误导该标签的使用。考虑到引导中所有的JQuery盛况,我想知道为什么他们没有改变选择符的插入符号。与盗用相比,这似乎是一个更为优雅的解决方案ul
杰伊·爱德华兹

Answers:


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


在这里找到了自己,因为我不需要用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


4
当您不需要表格时很有用。谢谢。
豪尔赫·雷涛2015年

11

现在,随着Bootstap中下拉语法的更改,Skelly的简单易懂的答案已经过时了。而是使用此:

$(".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%;}

根据需要在“ .select button”类中使用“ min-width”。
Brynner Ferreira 2015年

11

另一种选择是使用bootstrap select。用自己的话说:

使用按钮下拉菜单为Bootstrap定制的select / multiselect,其行为类似于常规的Bootstrap选择。


1
完全按照说的去做,可通过CDN获得。
scharfmn 2016年

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>


3

Ben的代码要求父div具有form-group类(我在使用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很酷,但是对于那些喜欢或需要带button和ul选项的下拉列表的人,这里是更新的代码。我已经编辑了史蒂夫(Steve)的代码,以修复跳至哈希链接并在选择后关闭下拉列表的问题。

感谢史蒂夫,本和史凯利!

$(".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

我目前正在与下拉列表进行斗争,我想分享一下我的经验:

在某些特定情况下<select>无法使用,必须通过下拉菜单“模拟”。

例如,如果您要创建引导程序输入组,例如带有下拉菜单的按钮(请参阅http://getbootstrap.com/components/#input-groups-buttons-dropdowns)。遗憾的<select>是,输入组不支持该显示,因此无法正确呈现。

还是有人解决了这个问题?我会对解决方案非常感兴趣。

更复杂的是,$(this).text()如果您使用glypicons或字体真棒图标作为下拉菜单的内容,则不能简单地使用它来捕获下拉菜单中选择的用户。例如: <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))即可获得所需的内容。

我希望这很清楚,可以对某人有所帮助:-)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.