【发布时间】:2014-11-20 03:11:37
【问题描述】:
我将 Select2 用于我的标记应用程序。但是,我无法删除项目上的现有标签。它不一致,但似乎取决于项目;在以下示例中,我始终可以删除标签“Bugs”,但无论我尝试这样做的顺序如何,其他标签都无法删除。
控制台日志显示删除的项目已从数据中删除,这是应该的,并且已删除事件将正确的项目标识为已删除,但在“val”中没有看到任何更改,因此没有更改发送到服务器。
代码:
<input id="id_tags" name="tags" type="text" value="Bugs, Existentialism, Kafkaesque" />
$("#id_tags").select2({
tokenSeparators:[","],
placeholder: "Start typing your tags",
createSearchChoice: function(term, data){
if ($(data).filter(function(){
return this.fields.name.localeCompare(term) === 0;
}).length === 0) {
return {
id: term,
fields: {"name": term}
};
}
},
multiple:true,
ajax: {
url: window.location.origin+'/tagsearch/',
dataType: 'json',
data: function( term, page ) {
return {tag: term};
},
results: function (data, page) {
return {results: data};
}
},
formatResult: tagformat,
formatSelection: tagformat,
maximumSelectionSize: 20,
formatSelectionTooBig: function(limit) {
return "Stories are limited to " + limit + " tags.";
},
initSelection : function(element, callback){
var data = [];
$(element.val().split(",")).each(function () {
data.push({id:this, fields:{name:this}});
});
callback(data);
}
});
$('#id_tags').on("select2-removed", function(e){
var data = $("#id_tags").select2("data");
console.log($('#id_tags').select2('val'));
console.log("removed "+ e.choice.fields.name);
console.log(data);
});
【问题讨论】:
-
把这个放在一起?您是否使用 ajax 将删除标签添加到数据库表中?
-
Ajax 仅用于提取现有标签以供用户搜索。添加和删除标签是在服务器表单提交后完成的(没有 ajax),并且工作正常(没有 select2)。控制台登录remove功能似乎指向了JS的问题。
-
不确定如何运行 JS fiddle,因为 ajax 加载的数据在我的本地服务器上。 ajax返回的JSON格式都是{"id": xxx, "fields": {"name": tag_name}}
标签: javascript select jquery-select2