Select2限制标签数量

时间:2014-01-27 11:43:01

标签: javascript jquery tags jquery-select2

有没有办法限制用户可以使用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这样的简单参数以及达到限制时要触发的回调,那就太棒了。

7 个答案:

答案 0 :(得分:66)

当然,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!

答案 1 :(得分:3)

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

 $(document).ready(function() {

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

        });

答案 2 :(得分:2)

$("#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个关键字。

答案 3 :(得分:1)

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

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

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

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

答案 4 :(得分:1)

这对我有用。

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

答案 5 :(得分:1)

方法1

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

方法2

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

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

答案 6 :(得分:0)

将 Get Request 发送到 action 方法并将类属性映射到下拉 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; }
    }