是否可以将列表粘贴到select2字段并匹配列表中的每个项目?

Der*_*son 14 jquery jquery-select2

我使用Select2来管理大型数据列表.用户已表示希望能够将列表粘贴到Select2字段以便一次选择各种项目而不是手动输入和匹配列表中的每个项目.

我试图用来tokenSeparators分隔列表中的项目.这个和文档中的令牌演示让我相信我希望做的事情是可能的,但到目前为止,我没有任何快乐.

我用来实例化Select2的代码是:

$('input').select2({
    width: 'element',
    matcher: function (term, text) {
        return text.toUpperCase().indexOf(term.toUpperCase()) === 0;
    },
    minimumInputLength: 3,
    multiple: true,
    data: tagList, // tagList is an array of objects with id & text parameters
    placeholder: 'Manage List',
    initSelection: function (element, callback) {
        var data = [];
        $.each(function () {
            data.push({id: this, text: this});
        });
        callback(data);
    },
    tokenSeparators: [',', ', ', ' ']
});
Run Code Online (Sandbox Code Playgroud)

只是为了澄清,在所有其他方面,select2字段工作.当列表粘贴到字段中时,没有任何匹配.我想测试粘贴列表中的所有项目.这是可能的,如果是的话,怎么样?

编辑: 我已经尝试了以下代码但它似乎不起作用:

$('body').on('paste', '#s2id_list-unitids .select2-input', function () {
    var that = this;
    setTimeout(function () {
        var tokens = that.value.split(/[\,\s]+/);
        $('#list-unitids').val(tokens, true);console.log($('#list-unitids').select2('val'));
    }, 1);
});
Run Code Online (Sandbox Code Playgroud)

这是我创造的小提琴:http://jsfiddle.net/KCZDu/.

igo*_*erg 18

select2提供了一个tokenizer允许您预处理输入的选项.这是您的特定用例的可能实现:

tokenizer: function(input, selection, callback) {

        // no comma no need to tokenize
        if (input.indexOf(',')<0) return;

        var parts=input.split(",");
        for (var i=0;i<parts.length;i++) {
            var part=parts[i];
            part=part.trim();
            // todo: check for dupes (if part is already in [selection])

            // check if the part is valid
            // todo: you will need a better way of doing this
            var valid=false;
            for (var j=0;j<unitIds.length;j++) {
                if (part===unitIds[j]) { valid=true; break; }
            }

            if (valid) callback({id:part,text:part});
        }
    }
Run Code Online (Sandbox Code Playgroud)

这是一个工作小提琴:http://jsfiddle.net/XcCqg/38/

还要注意你的原始小提琴使用select2 3.2,它非常过时,可能不支持tokenizer.

  • 谢谢!我现在可以在这周末放松一下!:) (2认同)