Я использую 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 перечитать список выбора после его обновления.