我正在使用jquery.tagsinput,并希望能够粘贴用逗号或空格分隔的电子邮件地址列表。使用类似https://github.com/xoxco/jQuery-Tags-Input/issues/22这样的东西,但是直到我按Enter才添加它们-尝试触发按键Enter事件,但是它不起作用。也不会有模糊事件的运气(如下所示)。有任何想法吗?
Flat-UI标记基于此库,我正在尝试实现非常相似的行为。
var tidyTags = function(e) {
var tags = (e.tags).split(/[ ,]+/);
var target = $(e.target);
for (var i = 0, z = tags.length; i<z; i++) {
var tag = $.trim(tags[i]);
if (!target.tagExist(tag)) {
target.addTag(tag);
}
}
$('#' + target[0].id + '_tag').trigger('focus');
//This doesn't work.
target.blur();
};
$("#tagsinput").tagsInput({
onAddTag : function(tag){
if(tag.indexOf(',') > 0) {
tidyTags({target: '#tagsinput', tags : tag});
}
},
});
最佳答案
好了,终于找到了解决方案:
DEMO HERE
只需在粘贴时将监听器添加到您的textbox
中,并且在初始化过程中不要设置onAddTag
即可,只需对其进行如下调用即可:
$("#tagsinput").tagsInput();//Initialization
$("#tagsinput_tag").on('paste',function(e){
var element=this;
setTimeout(function () {
var text = $(element).val();
var target=$("#tagsinput");
var tags = (text).split(/[ ,]+/);
for (var i = 0, z = tags.length; i<z; i++) {
var tag = $.trim(tags[i]);
if (!target.tagExist(tag)) {
target.addTag(tag);
}
else
{
$("#tagsinput_tag").val('');
}
}
}, 0);
});
需要注意的几点:
paste
方法仅在Firefox中选择文本时才会触发tagsinput
将隐藏您的#tagsinput
文本框,并添加自己的input
文本框,因此您需要在paste
文本框上调用#tagsinput_tag
事件,元素的结构如下图所示: