2015-12-02 68 views
0

我有一个多选选项,有很多选项。当选择“所有人”时,如果选择了其他人,则删除其他人,如果选择“所有人”,则应将其删除。删除select2中的选定元素中的一个项目

要删除其他,并保持项目'大家'没关系。但我有问题保留其他,只能删除所有人。

目前我有类似:

resetGroupSelectionWhenEverybody: function() { 
    $(".group_ids").on("select2:select", function (e){ 
     if (e.params.data.text === 'everybody') { 
     $('#scheduled_publication_groups_ids').select2({width: '50%'}).val(group_everybody_id).trigger("change"); 
     } else { 
     if ($('[title="everybody"]').length > 0) { 
      var idToRemove = 0; 
      groupIdsData = $('#scheduled_publication_groups_ids').select2('data'); 
      groupIdsData.forEach(function(e, i) { 
      if (e.text === 'everybody') { 
       idToRemove = i; 
      } 
      }); 
      groupIdsData.splice(idToRemove, 1); 
      $('#scheduled_publication_groups_ids').select2({'data': groupIdsData}).trigger("change"); 
     } 
     } 
    }); 
    }, 

有了这个代码groupIdsData是通联选择的元素我想(所有期望everybody的组)。但在我坚持改变观点后。 select2({'data': groupIdsData})似乎不是正确的选择。

几件事情:

  1. 我不认为我设置idToRemove正常
  2. 什么更新选择2的值的最佳方式多选?看起来好像是it can be a hash

回答

0

答案是用select2('val')得到一个id数组,然后使用这个。使用.val()不是完整的select2对象,代码更好。

resetGroupSelectionWhenEverybody: function() { 
    $(".group_ids").on("select2:select", function (e){ 
     if (e.params.data.text === 'everybody') { 
     $('#scheduled_publication_groups_ids').select2({width: '50%'}).val(group_everybody_id).trigger("change"); 
     } else { 
     if ($('[title="everybody"]').length > 0) { 
      groupIds = $('#scheduled_publication_groups_ids').select2('val'); 
      groupToKeep = groupIds.splice($.inArray(group_everybody_id, groupIds), 1); 
      $('#scheduled_publication_groups_ids').select2({width: '50%'}).val(groupToKeep).trigger("change"); 
     } 
     } 
    }); 
    },