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
のような単純なパラメーターと、制限に達したときに起動するコールバックが存在するか、存在することは素晴らしいことです。
もちろん、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!
受け入れられた答えは、maximumSelectionLengthステートメントがdocument.ready関数内にある必要があることを言及していません。だから私がやったのと同じトラブルを抱えている人のために、ここに私のために働いたコードがあります。
$(document).ready(function() {
$("#id").select2({
maximumSelectionLength: 3
});
});
$("#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つのキーワードを短縮します。
これは私のために働いていません、私はquery function not defined for Select2
ので、ここに別の回避策があります。
var onlyOne=false;
$("selector").select2({
maximumSelectionSize:function(){
if(onlyOne==true)
return 1;
else
return 5;
}
});
この設定は関数として定義でき、何かを検索し始めるたびに呼び出されます。
重要なことは、このselect2クロージャの外側で何かを定義して、チェック(アクセス)できるようにすることです。この場合、プログラムのどこかでonlyOne
の値を変更できます。もちろん、返されるこの制限は動的な場合もあります。
これは私のために働いています。
$("#category_ids").select2({ maximumSelectionLength: 3 });