有没有办法限制用户可以使用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
这样的简单参数以及达到限制时要触发的回调,那就太棒了。
答案 0 :(得分:66)
当然,maximumSelectionLength
喜欢这样:
$("#tags").select2({
maximumSelectionLength: 3
});
最大选择长度
Select2允许开发人员限制可以使用的项目数 在多选控件中选择。
它没有本机回调,但您可以将函数传递给formatSelectionTooBig
,如下所示:
$(function () {
$("#tags").select2({
maximumSelectionLength: 3,
formatSelectionTooBig: function (limit) {
// Callback
return 'Too many selected items';
}
});
});
或者您可以像这样扩展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>
答案 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; }
}