【问题标题】:Select2 limit number of tagsSelect2 限制标签数量
【发布时间】:2014-02-18 05:45:47
【问题描述】:

有没有办法限制用户可以使用 Select2 添加到输入字段的标签数量?

我有:

$('#tags').select2({
    containerCssClass: 'supplierTags',
    placeholder: "Usual suppliers...",
    minimumInputLength: 2,
    multiple: true,
    tokenSeparators: [",", " "],
    placeholder: 'Usual suppliers...',
            createSearchChoice: function(term, data) {
                if ($(data).filter(function() {
                    return this.name.localeCompare(term) === 0;
                }).length === 0) {
                    return {id: 0, name: term};
                }

            },
    id: function(e) {
        return e.id + ":" + e.name;
    },
    ajax: {
        url: ROOT + 'Call',
        dataType: 'json',
        type: 'POST',
        data: function(term, page) {
            return {
                call: 'Helpers->tagsHelper',
                q: term
            };
        },
        results: function(data, page) {
            return {
                results: data.tags
            };
        }
    },
    formatResult: formatResult,
    formatSelection: formatSelection,
    initSelection: function(element, callback) {
        var data = [];
        $(element.val().split(",")).each(function(i) {
            var item = this.split(':');
            data.push({
                id: item[0],
                name: item[1]
            });
        });
        callback(data);
    }
});

如果可以有一个像limit: 5 这样的简单参数以及达到限制时触发的回调,那就太好了。

【问题讨论】:

    标签: javascript jquery tags jquery-select2


    【解决方案1】:

    当然,maximumSelectionLength 就像这样:

    $("#tags").select2({
        maximumSelectionLength: 3
    });
    

    最大选择长度

    Select2 允许开发者限制可以选择的项目数量 在多选控件中选择。

    http://ivaynberg.github.io/select2/

    它没有原生回调,但你可以像这样将函数传递给formatSelectionTooBig

    $(function () {
        $("#tags").select2({
            maximumSelectionLength: 3,
            formatSelectionTooBig: function (limit) {
    
                // Callback
    
                return 'Too many selected items';
            }
        });
    });
    

    http://jsfiddle.net/U98V7/

    或者你可以像这样扩展formatSelectionTooBig

    $(function () {
        $.extend($.fn.select2.defaults, {
            formatSelectionTooBig: function (limit) {
    
                // Callback
    
                return 'Too many selected items';
            }
        });
    
        $("#tags").select2({
            maximumSelectionLength: 3
        });
    });
    

    编辑

    maximumSelectionSize 替换为更新后的maximumSelectionLength。谢谢@DrewKennedy!

    【讨论】:

    • 谢谢!有没有办法在达到这个限制时触发?那将是完美的。
    • 没有原生回调,但我为我的答案添加了一个可能的解决方案。
    • 请注意,maximumSelectionSize 已替换为 maximumSelectionLength
    • 如何在 Yii2 中使用这个?
    • 在发行说明中注明,格式化程序已移至语言选项。 (最大选择)。
    【解决方案2】:

    方法一

    $("#tags").select2({
        maximumSelectionLength: 3
    });
    

    方法二

    <select data-maximum-selection-length="3" ></select>
    

    所有可用选项列表https://select2.org/configuration/options-api

    【讨论】:

      【解决方案3】:

      接受的答案没有提到 maximumSelectionLength 语句应该在 document.ready 函数中。因此,对于遇到与我相同的问题的任何人,这里是对我有用的代码。

       $(document).ready(function() {
      
                $("#id").select2({
                  maximumSelectionLength: 3
                });
      
              });
      

      【讨论】:

        【解决方案4】:
        $("#keywords").select2({
            tags : true,
            width :'100%',
            tokenSeparators: [','],
            maximumSelectionLength: 5,
            matcher : function(term,res){
                return false;
            },
            "language": {
                'noResults': function(){
                    return "Type keywords separated by commas";
                }
            }
        }).on("change",function(e){
            if($(this).val().length>5){
                $(this).val($(this).val().slice(0,5));
            }
        });
        

        试试这样。它最多可以包含 5 个关键字。

        【讨论】:

          【解决方案5】:

          这对我不起作用,我收到了query function not defined for Select2,所以这是另一种解决方法。

                  var onlyOne=false;
                   $("selector").select2({
                      maximumSelectionSize:function(){
                          if(onlyOne==true)
                              return 1;
                          else
                              return 5;
                      }
                   });
          

          此设置可以定义为函数,每次开始搜索时都会调用它。

          重要的是你在这个 select2 闭包之外定义了一些东西,所以你可以检查它(访问它)。在这种情况下,您可以在程序中的某处更改 onlyOne 的值,当然这个返回的限制也可以是动态的。

          【讨论】:

          • maximumSelectionSize 现在可以设置为整数来限制选择的数量。
          【解决方案6】:

          这对我有用。

           $("#category_ids").select2({ maximumSelectionLength: 3 });
          

          【讨论】:

            【解决方案7】:

            发送 Get Request to action 方法和 Map 类属性到下拉 id 和 text 属性

            $("#DropDownId").select2({
                   minimumInputLength: 3,
                   maximumSelectionLength: 10,
                tags: [],
                ajax: {
                    url: "@Url.Action("ActionName", "ControllerName")",
                    type: "get",
                    dataType: 'json',
                    delay: 250,
                    data: function (params) {
                        return {
                            Title: params.term // search term
                        };
                    },
                    processResults: function (response) {
                        return {
                            results: $.map(response, function (item) {
                                return {
                                    text: item.Title,
                                    id: item.Id
                                }
                            })
                        };
                    }
                }
            });
            

            动作方法

            
             [HttpGet]
                    public JsonResult ActionName(string Title)
                    {
                        ClassName obj= new ClassName ();
                        obj.Title = "PMPAK";
                        obj.Id= -1;
                        obj.Add(nibafInstitute);
            
                        return Json(obj, JsonRequestBehavior.AllowGet);
                    }
            
                 public class ClassName 
                {
                    public int Id{ get; set; }
            
                    public string Title { get; set; }
                }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2015-08-23
              • 2021-09-26
              • 1970-01-01
              • 1970-01-01
              • 2023-03-13
              • 2014-03-30
              • 1970-01-01
              • 2020-02-18
              相关资源
              最近更新 更多