Javascript 选择2,删除选项更改数据,但不更改值

Javascript 选择2,删除选项更改数据,但不更改值,javascript,select,jquery-select2,Javascript,Select,Jquery Select2,我正在将Select2用于标记应用程序。但是,我在删除项目上的现有标记时遇到问题。这是不一致的,但似乎取决于项目;在下面的示例中,我总是可以删除标记“Bugs”,但其他标记无法删除,无论我尝试删除的顺序如何 控制台日志显示已删除的项目已从数据中删除,这是应该的,并且已删除事件将正确的项目标识为已删除,但在“val”中未看到任何更改,因此未向服务器发送任何更改 代码: $(“#id_标记”)。选择2({ 令牌分隔符:[“,”], 占位符:“开始键入您的标记”, createSearchChoic

我正在将Select2用于标记应用程序。但是,我在删除项目上的现有标记时遇到问题。这是不一致的,但似乎取决于项目;在下面的示例中,我总是可以删除标记“Bugs”,但其他标记无法删除,无论我尝试删除的顺序如何

控制台日志显示已删除的项目已从数据中删除,这是应该的,并且已删除事件将正确的项目标识为已删除,但在“val”中未看到任何更改,因此未向服务器发送任何更改

代码:


$(“#id_标记”)。选择2({
令牌分隔符:[“,”],
占位符:“开始键入您的标记”,
createSearchChoice:函数(术语、数据){
if($(数据).filter(函数(){
返回this.fields.name.localeCompare(term)==0;
}).length==0){
返回{
id:术语,
字段:{“名称”:术语}
};
}
},
多重:对,
阿贾克斯:{
url:window.location.origin+/tagsearch/,
数据类型:“json”,
数据:功能(术语,第页){
返回{tag:term};
},
结果:功能(数据、页面){
返回{结果:数据};
}
},
formatResult:tagformat,
formatSelection:tagformat,
最大选择大小:20,
formatSelectionTooBig:函数(限制){
return“故事限制为“+限制+”标记。”;
},
initSelection:函数(元素,回调){
var数据=[];
$(element.val().split(“,”)。每个(函数(){
push({id:this,fields:{name:this}});
});
回调(数据);
}
});
$(“#id_标记”)。在(“select2 removed”,函数(e)上{
var数据=$(“#id_标记”)。选择2(“数据”);
console.log($('#id_标记')。选择2('val');
log(“删除”+e.choice.fields.name);
控制台日志(数据);
});

尝试从输入元素的“value”属性中删除空格

更改:

value="Bugs, Existentialism, Kafkaesque"
致:

或者,您可以在
initSelection
方法中修剪空格

我知道空格不应该在那里——否则它们将是id值的一部分——但我不确定它们为什么会导致值变得如此混乱

这里有一个显示问题的,还有一个删除了空格的。

.split(“,”
更改为
.split(“,”)
,在
初始选择中:

initSelection:函数(元素,回调){
var数据=[];
$(element.val().split(“,”)。每个(函数(){
push({id:this,fields:{name:this}});
});
回调(数据);
}

把这些东西放在一起?您是否使用ajax向数据库表添加删除标记?ajax仅用于为用户搜索提取现有标记。添加和删除标记是在服务器post表单提交(无ajax)上完成的,工作正常(无需选择2)。删除函数上的控制台日志似乎指向JS问题。不确定如何运行JS FIDLE,因为ajax加载的数据在我的localserver上。从ajax返回的JSON都是{“id”:xxx,“fields”:{“name”:tag_name}的形式,这就解决了这个问题。我在
initSelection
中使用“,”而不是“,”进行拆分,结果得到了解决。最好解决这个问题,因为服务器默认值包括空格(Django)。谢谢!谢谢,伙计们!我在下面发布了@sybaritic建议的解决方案。
value="Bugs, Existentialism, Kafkaesque"
value="Bugs,Existentialism,Kafkaesque"