【问题标题】:How to add tooltip on each select option with bootstrap-select如何使用 bootstrap-select 在每个选择选项上添加工具提示
【发布时间】:2017-12-06 07:29:33
【问题描述】:

我正在尝试使用 bootstrap-select 为每个选择选项添加工具提示。在我检查时,似乎 select-js 将选择标签转换为 ul。我不知道这是我的代码不起作用的原因。

html

<div class="form-group">
    <label  for="email">Network : </label>
    <select  id="basic" class="selectpicker form-control" >
        <option value="0" data-toggle="tooltip" title="Finding your IMEI number">One</option>
        <option value="1" data-toggle="tooltip" title="Next title" >Two</option>
        <option value="2" >Three</option>
        <option  value="3">Four</option>
        <option value="4">Five</option>
        <option value="5">Six</option>
    </select>
</div>

js

<script>
$(document).ready(function () {
  var mySelect = $('#first-disabled2');

  $('#special').on('click', function () {
    mySelect.find('option:selected').attr('disabled', 'disabled');
    mySelect.selectpicker('refresh');
  });

  var $basic2 = $('#basic2').selectpicker({
    liveSearch: true,
    maxOptions: 1
  });
});
</script>

<script>
$(document).ready(function(){
$('[data-toggle="tooltip"]').tooltip();
});
</script>

【问题讨论】:

标签: javascript jquery html twitter-bootstrap twitter-bootstrap-tooltip


【解决方案1】:

2021 年 6 月 25 日更新

似乎对于1.13.x 及更高版本,解决方案是使用:

$('#select').data('selectpicker').selectpicker.main.elements - 返回可以使用的li 元素数组。

如该插件的 Github 问题页面所述:

https://github.com/snapappointments/bootstrap-select/issues/2561#issuecomment-787112874


Bootstrap-select 创建新的 DOM 元素(&lt;ul&gt;&lt;li&gt;s)以呈现下拉项目。

您的代码的问题是工具提示附加到原始option 元素。 但它们必须附加到新创建的元素上。

但是,我们应该只在 Bootstrap-select 插件初始化之后附加它们,所以我们可以利用 loaded.bs.select 事件(来自插件文档:“这个事件在选择被初始化后触发。 " - https://silviomoreto.github.io/bootstrap-select/options/#events)。

此外,插件不会从option 元素中复制所有属性,因此列表项不会设置title 属性。我们必须手动复制这个属性。

为了找到插件创建的列表项,我们可以利用 .data('selectpicker') 属性,该属性附加到我们原来的 select 元素中,并包含我们需要的所有数据。 列表项位于.data('selectpicker').$lis 对象中。

请检查以下代码:

$(document).ready(function () {

    $('#basic').selectpicker({
     liveSearch: true
     // other options...
    }).on('loaded.bs.select', function(e){

      // save the element
      var $el = $(this);

      // the list items with the options
      var $lis = $el.data('selectpicker').$lis;

      $lis.each(function(i) {
        
          // get the title from the option
          var tooltip_title = $el.find('option').eq(i).attr('title');

          $(this).tooltip({
             'title': tooltip_title,
             'placement': 'top'
          });
  
       });

    });

});

小提琴:https://jsfiddle.net/61kbe55z/.

【讨论】:

  • 在最新的 boostrap-select 1.13.14 中不起作用。您的代码的 $lis 变量变得未定义,因为它们可能已经更改了变量结构/名称。尝试改用 $element[0] ,但这也没有帮助。更新JSFiddle。寻找其他替代品。
  • 发现了一些东西:var $lis = $el.data('selectpicker').selectpicker.main.elements;:jsfiddle.net/tbdxs5jp/7
  • 只有当我们在选项中有静态标题时才有效。如果我们将动态值加载到 title 中。它不显示工具提示。有人检查过动态值吗?
  • @amar ghodke,你用的是什么版本?您能否提供一个最小可重现示例的小提琴,以便我可以详细检查问题?
  • 在最初的解决方案中,工具提示是在loaded.bs.select事件中附加的,但是当这个事件被触发时,ajax请求并没有完成。由于您已经在使用.selectpicker('refresh'),我们可以利用refreshed.bs.select 事件并在此事件的回调中附加工具提示 - 小提琴:jsfiddle.net/wskm4edz
【解决方案2】:

使用如下代码,无需在js中处理。 使用 title attr on 选项指定选择后按钮上显示的文本,如果不指定将面临按钮工具提示的问题。

<div class="form-group">
    <label  for="email">Network : </label>
    <select  id="basic" class="selectpicker form-control" >
        <option value="0" title="one"><span data-toggle="tooltip" title="Finding your IMEI number">One</span></option>
        <option value="1" title="two"><span data-toggle="tooltip" title="Next title" >Two</span></option>
        <option value="2" >Three</option>
        <option  value="3">Four</option>
        <option value="4">Five</option>
        <option value="5">Six</option>
    </select>
</div>

【讨论】:

  • 此代码在最新的 bootstrap-select 1.13.14 中不起作用。您可以在上面答案中提到的我的小提琴中替换您的代码。奇怪!
【解决方案3】:

在此处检查此工作代码,请将此作为参考。

$(document).ready(function(){
    $('[data-toggle="tooltip"]').tooltip();
  });
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>

<div class="container" style="margin-top:80px;">
            <div class="row">
                <div class="col-sm-4"></div>
                <div class="col-sm-4">
                    <select name="opts" id="opts" class="form-control" multiple>
                        <option value="1" data-toggle="tooltip" data-container="#tooltip_container" title="tooltip 1">option 1</option>
                        <option value="2" data-toggle="tooltip" data-container="#tooltip_container" title="tooltip 2">option 2</option>
                        <option value="3" data-toggle="tooltip" data-container="#tooltip_container" title="tooltip 3">option 3</option>
                        <option value="4" data-toggle="tooltip" data-container="#tooltip_container" title="tooltip 4">option 4</option>
                        <option value="5" data-toggle="tooltip" data-container="#tooltip_container" title="tooltip 5">option 5</option>
                        <option value="6" data-toggle="tooltip" data-container="#tooltip_container" title="tooltip 6">option 6</option>
                    </select>
                    <div id="tooltip_container"></div>
                </div>
                <div class="col-sm-4"></div>
            </div>

【讨论】:

  • 仅适用于多选,不适用于常规选择。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-13
  • 2019-01-11
  • 2021-10-23
  • 1970-01-01
  • 2021-01-29
  • 2016-01-16
  • 2014-06-09
相关资源
最近更新 更多