Selectable optgroup using select2

后端 未结 8 612
醉话见心
醉话见心 2020-12-02 21:20

I have used select2 to select multiple options from a drop down, but is it possible for select2 to select the full optgroup?? What I want is when user select the option grou

8条回答
  •  盖世英雄少女心
    2020-12-02 22:03

    Well, I came across this issue and I found that every time the select2 (Select2 4.0.5) opens it adds a span element before the closing body element. In addition, inside the span element adds a ul with the id: select2-X-results, where X is the select2 id. So I found the following workaround (jsfiddle):

    var countries = [{
      "id": 1,
      "text": "Greece",
      "children": [{
        "id": "Athens",
        "text": "Athens"
      }, {
        "id": "Thessalonica",
        "text": "Thessalonica"
      }]
    }, {
      "id": 2,
      "text": "Italy",
      "children": [{
        "id": "Milan",
        "text": "Milan"
      }, {
        "id": "Rome",
        "text": "Rome"
      }]
    }];
    
    $('#selectcountry').select2({
      placeholder: "Please select cities",
      allowClear: true,
      width: '100%',
      data: countries
    });
    
    $('#selectcountry').on('select2:open', function(e) {
    
      $('#select2-selectcountry-results').on('click', function(event) {
    
        event.stopPropagation();
        var data = $(event.target).html();
        var selectedOptionGroup = data.toString().trim();
    
        var groupchildren = [];
    
        for (var i = 0; i < countries.length; i++) {
    
    
          if (selectedOptionGroup.toString() === countries[i].text.toString()) {
    
            for (var j = 0; j < countries[i].children.length; j++) {
    
              groupchildren.push(countries[i].children[j].id);
    
            }
    
          }
    
    
        }
    
    
        var options = [];
    
        options = $('#selectcountry').val();
    
        if (options === null || options === '') {
    
          options = [];
    
        }
    
        for (var i = 0; i < groupchildren.length; i++) {
    
          var count = 0;
    
          for (var j = 0; j < options.length; j++) {
    
            if (options[j].toString() === groupchildren[i].toString()) {
    
              count++;
              break;
    
            }
    
          }
    
          if (count === 0) {
            options.push(groupchildren[i].toString());
          }
        }
    
        $('#selectcountry').val(options);
        $('#selectcountry').trigger('change'); // Notify any JS components that the value changed
        $('#selectcountry').select2('close');    
    
      });
    });
    li.select2-results__option strong.select2-results__group:hover {
      background-color: #ffffd;
      cursor: pointer;
    }
    
    
    
    
    
    
    
    

    Selectable optgroup using select2

提交回复
热议问题