Обновите списки опций select2, как только обновятся списки опций выбора по умолчанию - PullRequest
0 голосов
/ 22 февраля 2019

Я использую select2 - v4.0.5.Я отображаю одни и те же списки параметров в другом массиве, используя что-то вроде:

@foreach($rows as $rk => $rv)
        <tr>

            <td>
                <select class="form-control select2 mselect" name="row[]">
                    <option value=" " >-- Select --</option>
                    @foreach($db_header as $db)
                        <option value="{{$db}}">{{$db}}</option>
                    @endforeach
                </select>
            </td>

        </tr>

@endforeach

Здесь, если я выберу name в раскрывающемся списке в первой строке.Эти name параметры должны быть скрыты в выпадающем списке других строк.Итак, чтобы добиться этого, я написал следующий код:

var d_array = Array();
$(document).ready(function(){

    $('.mselect').on("change", function (e) {
              d_array = [];
              $('.mselect').each(function(k,v){
                    cv = $(this).val();           
                    if($.trim(cv) != '')
                    {
                        d_array.push(cv);
                    }

              });

              checkMSelect2();

        });

});

function checkMSelect2()
{

    $('.mselect').each(function(k,v){
            c = $(this);
            cv = c.val();
            c.find('option').show();
            $(d_array).each(function(ki, vi){
                if(vi != cv)
                {
                    c.find('option[value="'+vi+'"]').hide();

                }

            });

    });


}

Это работает совершенно нормально, если я использую опцию выбора HTML по умолчанию.Однако, если я инициализирую select2, эти скрытые опции также отображаются для других строк.

$(".select2").select2();

Похоже, что select2 инициализируется сначала и не обновляется после обновления select.Как я могу заставить select2 перечитать список выбора после его обновления.

...