简体   繁体   中英

Remove one item from selected elements in select2

I have a multiselect with many options. When 'everybody' is selected it removes other selected, if other are selected and the 'everybody' is selected it should remove it.

To remove the other and keep the item 'everybody' it's ok. But I have problem to keep other and only remove everybody.

For the moment I have something like :

  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");
        }
      }
    });
  },

With this code groupIdsData is tonly the selected elements I want (all expect everybody 's group). But after I'm stuck to change the view. select2({'data': groupIdsData}) doesn't seems to be the right choice.

Few things :

  1. I don't think I'm setting the idToRemove properly
  2. What the best way to update the value of the select2 multiselect? It seems it can be a hash

The answer is to use select2('val') to get a array of ids, and then work with this. Code is better using .val() not full select2 objects.

  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");
        }
      }
    });
  },

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM