无法使用 JQuery 设置 Select2 下拉值

Unable to set Select2 dropdown value using JQuery

我有两个下拉菜单,第一个是多 select 下拉菜单,第二个从第一个下拉菜单 selection 中获取值。那部分工作正常。但是我有一个问题,每当第一个下拉列表中包含一个新的 selection 时,第二个下拉列表的 selected 值就会被清除,并且默认为第一个值。我需要它来保留以前的值。

例如;在第一个下拉列表中,假设我 select 加利福尼亚、新泽西和华盛顿,第二个下拉列表具有这三个值。然后我在第二个下拉列表中选择华盛顿。到目前为止,它可以按需工作。但是,如果我从第一个下拉列表中添加说佛罗里达,我的代码确保将佛罗里达添加到第二个下拉列表中,但较早的 select 华盛顿离子被清除,而是返回加利福尼亚。在添加新元素后,我希望它留在华盛顿。我在这里的代码中做错了什么?

$(document).ready(function() {
    $('#allstates').select2();
    $('#mainstate').select2();
});


$(document).on('select2:select', '#allstates', function (event) {
    var values = [];
    var displayText = [];
    // copy all option values from selected
    $(event.currentTarget).find("option:selected").each(function (i, selected) {
        displayText[i] = $(selected).text();
        values[i] = $(selected).val();
    });

    if (values.length > 0) {             

        var mainstate = $('#' + 'mainstate');
        var currentvalue = mainstate.val();
        mainstate.empty();
        
        for (var i = 0; i < values.length; i++) {
            mainstate.append($('<option>', { value: values[i], text: displayText[i] }, '<option/>'));
        }

        mainstate.select2();
        
        if (currentvalue != null && currentvalue != "" && currentvalue != undefined) {
            if (_.contains(values, currentvalue.toUpperCase())) {
                mainstate.select2("data", { id: currentvalue, text: displayText[currentvalue] });
            }
        }        
    }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.10/css/select2.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.10/js/select2.js"></script>

<select class="js-example-basic-single" id="allstates" name="state" multiple>
  <option value="AL">Alabama</option>
  <option value="CA">California</option>
  <option value="FL">Florida</option>  
  <option value="NJ">New Jersey</option>
  <option value="TX">Texas</option>
  <option value="WA">Washington</option>
  <option value="WY">Wyoming</option>
</select>

<select class="main-state" id="mainstate"  name="mainstate">
</select>

对于Select V4,您需要像这样手动触发它

$('#mainstate').val(currentvalue).trigger('change');

    $(document).ready(function() {
        $('#allstates').select2();
        $('#mainstate').select2();
    });


    $(document).on('select2:select', '#allstates', function (event) {
        var values = [];
        var displayText = [];
        // copy all option values from selected
        $(event.currentTarget).find("option:selected").each(function (i, selected) {
            displayText[i] = $(selected).text();
            values[i] = $(selected).val();
        });

        if (values.length > 0) {             

            var mainstate = $('#' + 'mainstate');
            var currentvalue = mainstate.val();
            mainstate.empty();
            
            for (var i = 0; i < values.length; i++) {
                mainstate.append($('<option>', { value: values[i], text: displayText[i] }, '<option/>'));
            }

            mainstate.select2();
            
            if (currentvalue != null && currentvalue != "" && currentvalue != undefined) {
                if (_.contains(values, currentvalue.toUpperCase())) {
                    $('#mainstate').val(currentvalue).trigger('change');
                }
            }        
        }
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore-min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.10/css/select2.min.css" rel="stylesheet"/>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.10/js/select2.js"></script>

    <select class="js-example-basic-single" id="allstates" name="state" multiple>
      <option value="AL">Alabama</option>
      <option value="CA">California</option>
      <option value="FL">Florida</option>  
      <option value="NJ">New Jersey</option>
      <option value="TX">Texas</option>
      <option value="WA">Washington</option>
      <option value="WY">Wyoming</option>
    </select>

    <select class="main-state" id="mainstate"  name="mainstate">
    </select>