我正在使用Select2标记输入jQuery插件。
我通过两个 json 格式化变量调用选择项和预选项,并使用 initSelection 选项设置预选项。
所有内容都完美无缺,但是当我从选择框中选择一个新项目时,之前的项目就会被删除。
我该如何解决这个问题?
var allTags = [{
"tag_id": 1,
"tag_title": "Laravel"
}, {
"tag_id": 3,
"tag_title": "jQuery"
}, {
"tag_id": 4,
"tag_title": "HTML"
}];
var postTags = ["tag_id": 3, "tag_title": "jQuery"
}, {
"tag_id": 4,
"tag_title": "HTML"
}
}];
var allTags = $.map(allTags, function (obj) {
obj.id = obj.id || obj.tag_id;
obj.text = obj.text || obj.tag_title;
return obj;
});
var postTag = $.map(postTags, function (obj) {
obj.id = obj.id || obj.tag_id;
obj.text = obj.text || obj.tag_title;
return obj;
});
$('[id^="meta_keywords"]').select2({
dir: "rtl",
tags: true,
initSelection: function (element, callback) {
callback(postTag);
},
data: allTags
});
这是一个JsFiddle示例:
答案 0 :(得分:1)
单击以前选择的项目时的多选将取消选择它。 initSelection代码不是必需的,您可以在数据部分中预先选择它们
var allTags = [{
"tag_id": 1,
"tag_title": "Laravel",
}, {
"tag_id": 3,
"tag_title": "jQuery",
selected: true
}, {
"tag_id": 4,
"tag_title": "HTML",
selected: true
}];
var allTags = $.map(allTags, function (obj) {
obj.id = obj.id || obj.tag_id;
obj.text = obj.text || obj.tag_title;
obj.selected = obj.selected || false;
return obj;
});
$('[id^="meta_keywords"]').select2({
dir: "rtl",
tags: true,
data: allTags
});
我无法找到更好的方法但是如果你想从下拉列表中隐藏已经选择的项目,一些CSS可以做到这一点
li.select2-results__option[aria-selected='true'] {
display: none;
}