Javascript 选择2:选择新标签后更新选项

Javascript 选择2:选择新标签后更新选项,javascript,jquery,jquery-select2,jquery-select2-4,Javascript,Jquery,Jquery Select2,Jquery Select2 4,我实现了一个标签系统,您可以从现有标签中选择或添加新标签。选择新标记后,将使用AJAX调用将其持久化 为了实现这一点,我使用回调createTag和事件select2:select。因为我喜欢只在选择标记时创建标记,所以如果触发了事件select2:select,我会为此调用AJAX 问题是,我需要使用将新标记持久化到数据库中得到的ID更新已经创建的select2选项。最干净的解决方案是什么 以下是我所拥有的: $('select.tags').select2({ tags: true

我实现了一个标签系统,您可以从现有标签中选择或添加新标签。选择新标记后,将使用AJAX调用将其持久化

为了实现这一点,我使用回调
createTag
和事件
select2:select
。因为我喜欢只在选择标记时创建标记,所以如果触发了事件
select2:select
,我会为此调用AJAX

问题是,我需要使用将新标记持久化到数据库中得到的ID更新已经创建的select2选项。最干净的解决方案是什么

以下是我所拥有的:

$('select.tags').select2({
     tags: true,
     ajax: {
         url: '{{ path('tag_auto_complete') }}',
         processResults: function (data) {
             return {
                 results: data.items,
                 pagination: {
                     more: false
                 }
             };
         }
     },
     createTag: function (tag) {
         return {
             id: tag.term, // <-- this one should get exchanged after persisting the new tag
             text: tag.term,
             tag: true
         };
     }
 }).on('select2:select', function (evt) {
     if(evt.params.data.tag == false) {
         return;
     }

     $.post('{{ path('tag_crrate_auto_complete') }}', { name: evt.params.data.text }, function( data ) {
        // ----> Here I need to update the option created in "createTag" with the ID
        option_to_update.value = data.id;

     }, "json");
 });
$('select.tags')。选择2({
标签:是的,
阿贾克斯:{
url:“{path('tag_auto_complete')}}”,
processResults:函数(数据){
返回{
结果:数据项,
分页:{
更多:错误
}
};
}
},
createTag:函数(标记){
返回{
id:tag.term,//这里我需要用id更新在“createTag”中创建的选项
选项_to_update.value=data.id;
}“json”);
});

我的问题是,我没有将新标记作为
标记添加到本机选择字段

这是必要的,因为如果存在具有此值的
标记,则select2会检查通过
select2.val(values)
设置的值。如果不存在,则select2会自动将该值从数组中抛出,并设置在基础选择字段中具有相应选项标记的值数组

这就是它现在的工作原理(对于select2 4.0.x):

您可以向每个结果中添加附加数据,例如,您自己呈现的结果列表中包含附加数据。

只需更新:

新语法是

e.params.args.data.id
不是


您是否尝试在创建标记后触发更改事件?@BuddhistBeast这对我是否有帮助?如果我侦听此事件,我的ID已丢失?或者我是否应侦听更改事件而不是与选择事件相关的事件
[
    {'id': '1', 'text': 'foo'},
    {'id': '2', 'text': 'bar'},
    {'id': '3', 'text': 'baz'}
]
e.params.args.data.id
e.params.data.id