web-dev-qa-db-ja.com

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のような単純なパラメーターと、制限に達したときに起動するコールバックが存在するか、存在することは素晴らしいことです。

31
imperium2335

もちろん、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!

68
Magnus Engdal

受け入れられた答えは、maximumSelectionLengthステートメントがdocument.ready関数内にある必要があることを言及していません。だから私がやったのと同じトラブルを抱えている人のために、ここに私のために働いたコードがあります。

 $(document).ready(function() {

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

        });
3
Delta Charlie
$("#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つのキーワードを短縮します。

2

これは私のために働いていません、私はquery function not defined for Select2ので、ここに別の回避策があります。

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

この設定は関数として定義でき、何かを検索し始めるたびに呼び出されます。

重要なことは、このselect2クロージャの外側で何かを定義して、チェック(アクセス)できるようにすることです。この場合、プログラムのどこかでonlyOneの値を変更できます。もちろん、返されるこの制限は動的な場合もあります。

1
Mr Br

これは私のために働いています。

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