【问题标题】:How to change the bootstrap multiselect label instead of selected all?如何更改引导多选标签而不是全选?
【发布时间】:2013-10-01 00:26:24
【问题描述】:

我使用的是引导多选下拉菜单,而不是在点击全选选项时显示的列表数量我们可以显示所有选定的文本。

http://davidstutz.github.io/bootstrap-multiselect/

【问题讨论】:

  • 贴一些代码,到目前为止你尝试了什么?
  • 我尝试调试,但它似乎使用了直接的 jquery.js。看起来不像自定义内容。它看起来不对,但很奇怪。如果你能在3个选择之前算出来,当然可以扩展到4、5、6个。

标签: jquery twitter-bootstrap bootstrap-multiselect


【解决方案1】:

我将第三个按钮的(按钮提示带有“全选”选项的多选)的 ID 更改为 test。它可以工作,但您需要先从开发人员工具(Chrome / Firefox 添加 F12)向按钮添加 id。

$('#test+ul>li').change(function(){
    $('#test').text($('#test').attr('title'));
});

添加 id 后即可进行测试。之后请使用 jsfiddle.net。您可能会更快地找到帮助。

【讨论】:

    【解决方案2】:

    如果以后有人问这个问题,解决办法是改变

    { nonSelectedText: 'None selected' }  
    

    为此文本分配一个全局变量,通过 JavaScript 更改它。

    值位于 bootstrap-multiselect.js 文件中。

    【讨论】:

    • 我很高兴我向下滚动,这非常有效。如果您有多个,您可以为每个新的多选对象设置noneSelectedText。谢谢!
    • @user1121019 你认为这不是公认的答案吗? :)
    【解决方案3】:

    您可以更改所有 4 种情况“未选择”、“n 选择”、“全部”选择​​或“选定值”的“标签”(引导多选)文本,如下所示:

    jQuery

    $('#level').multiselect({
        includeSelectAllOption: true,
        maxHeight: 150,
        buttonWidth: 150,
        numberDisplayed: 2,
        nSelectedText: 'selected',
        nonSelectedText: 'None selected',
        buttonText: function(options, select) {
          var numberOfOptions = $(this).children('option').length;
          if (options.length === 0) {
             return nonSelectedText + ' <b class="caret"></b>';
          }
          else{
                 if (options.length > numberDisplayed) {
                     if(options.length === numberOfOptions){
                         return ' All Selected' + ' <b class="caret"></b>';
                     }
                     return options.length + ' ' + nSelectedText + ' <b class="caret"></b>';
                 }else {
                     var selected = '';
                     options.each(function() {
                        var label = ($(this).attr('label') !== undefined) ?  
                                                           $(this).attr('label'):$(this).html();
                        selected += label + ', ';
                     });
                     return selected.substr(0, selected.length - 2) + ' <b class="caret"></b>';
                 }
           }
        }
    });
    

    HTML

    <select multiple="multiple" id="level">
      <option value="volvo">Volvo</option>
      <option value="saab">Saab</option>
      <option value="opel">Opel</option>
      <option value="audi">Audi</option>
    </select>
    

    它对我有用。玩得开心!

    【讨论】:

    • 不知何故所有选定的部分对我不起作用并落入 nSelected 部分...基本上 options.length === numberOfOptions 不能正常工作,我不知道什么可以错了..你有什么建议吗?
    【解决方案4】:

    使用初始化 obj 选项。

    $("#services").multiselect({
      nonSelectedText:'Services'
    });
    

    这个选项对我有用。

    【讨论】:

    • 这里有错别字,属性名为nonSelectedText
    【解决方案5】:

    使用数据占位符

    <select data-placeholder="Month">
    

    这对我有用。

    【讨论】:

    • 似乎根本不起作用。你用的是哪个版本?
    【解决方案6】:

    Philip 的回答对我有用,但只是让它更完整一点,应该在文件准备好时调用它。所以对我来说,包括设置多个列表的解决方案是:

    $(document).ready(function() {
        $("#bedrooms").multiselect({
            nonSelectedText:'Bedrooms'
        });
        $("#bathrooms").multiselect({
            nonSelectedText:'Bathrooms'
        });
        $("#garages").multiselect({
            nonSelectedText:'Garages'
        });
        $("#livingareas").multiselect({
            nonSelectedText:'Living Areas'
        });
    });
    

    【讨论】:

      【解决方案7】:

      关注official documentation

      allSelectedText 是选择所有选项时显示的文本。你 可以通过将 allSelectedText 设置为 false 来禁用显示。

      使用选项

      {
      ...
      allSelectedText: false,
      ...
      }
      

      【讨论】:

      猜你喜欢
      • 2018-12-17
      • 2012-05-21
      • 2017-05-20
      • 2014-12-15
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-11
      相关资源
      最近更新 更多