我使用Select2来管理大量数据.用户表示希望能够将列表粘贴到Select2字段,以便一次选择各种项目,而不是手动输入和匹配列表中的每个项目.
我尝试使用tokenSeparator来分离列表中的项目.这和demo on tokens in the documentation导致我相信,我希望做的是可能的,但到目前为止我没有喜悦.
我用来实例化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: [',',' '] });
只是为了澄清,在所有其他方面,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); });
这里是我创建的小提琴:http://jsfiddle.net/KCZDu/.
解决方法
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}); } }
这里是一个工作小提琴:http://jsfiddle.net/XcCqg/38/
还要注意你原来的小提琴使用select2 3.2,这是非常过时的,可能不支持音标器.
原文地址:https://www.jb51.cc/jquery/179598.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。