自定义 Bootstrap 下拉框

自定义 Bootstrap 下拉框

Flying
2015-05-28 / 0 评论 / 144 阅读 / 正在检测是否收录...

前面文章我们已经讨论了 Bootstrap 怎样实现模态框垂直居中和表单验证,本文将进一步探讨怎样自定义 Bootstrap 下拉框。

dropdown-bootstrap.svg

问题

下拉框在不同的浏览器会显示成不同的 UI,我们可以对其渐进增强,通常情况下用 select 和 option 元素设置数据再将其隐藏,然后用 divspanulli 这些来替换渲染,这样不同的浏览器也会显示成统一的 UI 了。

解决办法

这样实现起来也不是那么容易的,如果我们的项目用到 Bootstrap,可以借助下拉菜单组件(dropdown)来简单自定义下拉框。

注意:下拉菜单组件不能反显当前的选项,这个功能需要增强。

直接上代码了:

  • Html 代码:
<div class="col-sm-3 col-md-2">
  <div class="row dropdown">
    <button type="button" class="btn btn-default dropdown-toggle form-control"
      id="dropdownTitle" data-toggle="dropdown">
      <span data-bind="label">请选择</span> <span class="caret"></span>
    </button>
    <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownTitle">
      <li role="presentation">
        <a role="menuitem" tabindex="-1" href="#">JavaScript</a>
      </li>
      <li role="presentation" selected>
        <a role="menuitem" tabindex="-1" href="#">Flash</a>
      </li>
      <li role="presentation">
        <a role="menuitem" tabindex="-1" href="#">Ajax</a>
      </li>
      <li role="presentation">
        <a role="menuitem" tabindex="-1" href="#">Silverlight</a>
      </li>
    </ul>
  </div>
</div>
  • JavaScript 代码:
$(document.body).on('click', '.dropdown-menu li', function(event) {
  var target = $(event.currentTarget);
  target.closest('.dropdown')
    .find('[data-bind="label"]').text(target.text()).attr('title', target.text())
    .children('.dropdown-toggle').dropdown('toggle');
});

$('.dropdown-menu li').each(function() {
  if ($(this).attr('selected')) {
    $(this).trigger('click');
  }
});

参考

登录后点击查看按钮查看最终效果

  • 如果你需要更复杂的功能,可以参看bootstrap-select,该第三方库支持更多功能设置。
6

评论 (0)

取消