2015-12-02 69 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"); 
     } 
     } 
    }); 
    },