从select2

时间:2015-12-02 16:15:13

标签: javascript jquery-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' s)。但在我改变观点之后。 select2({'data': groupIdsData})似乎不是正确的选择。

少数事情:

  1. 我认为我没有正确设置idToRemove
  2. 更新select2 multiselect值的最佳方法是什么?似乎是it can be a hash

1 个答案:

答案 0 :(得分: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");
        }
      }
    });
  },