web*_*ber 7 javascript jquery-select2
我正在使用select2进行标记,我设置了这样,用户也可以添加新标签.我正在处理的问题是验证用户输入并将清理后的标签添加到选择中.
更具体地说,当用户在标签中输入空格时,我使用formatNoMatches来显示用于清理标签的js链接,然后以编程方式添加标签.此代码似乎运行没有错误,但是当调用sanitize时,将清除输入的所有选择.
我可能出错的任何线索?
var data=[{id:0,tag:'enhancement'},{id:1,tag:'bug'},{id:2,tag:'duplicate'},{id:3,tag:'invalid'},{id:4,tag:'wontfix'}];
function format(item) { return item.tag; }
function sanitize(a){
$("#select").select2('val',[{
id: -1,
tag: a
}]);
console.log(a);
};
$("#select").select2({
tags: true,
// tokenSeparators: [",", " "],
createSearchChoice: function(term, data) {
return term.indexOf(' ') >= 0 ? null :
{
id: term,
tag: term
};
},
multiple: true,
data:{ results: data, text: function(item) { return item.tag; } }, formatSelection: format, formatResult: format,
formatNoMatches: function(term) { return "\"" + term + "\" <b>Is Invalid.</b> <a onclick=\"sanitize('"+ term +"')\">Clear Invalid Charecters</a>" }
});
Run Code Online (Sandbox Code Playgroud)
只有这个解决方案对我有用:
function convertObjectToSelectOptions(obj){
var htmlTags = '';
for (var tag in obj){
htmlTags += '<option value="'+tag+'" selected="selected">'+obj[tag]+'</option>';
}
return htmlTags;
}
var tags = {'1':'dynamic tag 1', '2':'dynamic tag 2'}; //merge with old if you need
$('#my-select2').html(convertObjectToSelectOptions(tags)).trigger('change');
Run Code Online (Sandbox Code Playgroud)
经过更多的修改后,我意识到我应该将新项目设置为“数据”属性而不是值。
var newList = $.merge( $('#select').select2('data'), [{
id: -1,
tag: a
}]);
$("#select").select2('data', newList)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9040 次 |
| 最近记录: |