我正在使用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重新读取。