在Laravel中无需JS为bootstrap-select设置默认值
解决bootstrap-select多选下拉框在编辑场景的默认值设置问题
正确实现步骤
1. 提取已选分类ID数组
在Blade模板中用@php块创建已选分类的ID数组,避免用{{}}输出多余内容:
@php $selectedCategoryIds = []; foreach ($product->categories as $origin) { $selectedCategoryIds[] = $origin->category->id; } @endphp
2. 生成带选中状态的下拉选项
只遍历一次全部分类,通过in_array判断当前分类是否属于已选列表,动态添加selected属性:
<select name="category_id[]" class="form-control selectpicker" multiple data-live-search="true"> @foreach($categories as $category) <option value="{{$category->id}}" {{ in_array($category->id, $selectedCategoryIds) ? 'selected' : '' }}> {{ $category->name }} </option> @endforeach </select>
3. 刷新bootstrap-select插件
bootstrap-select基于原生select封装,设置完原生选中状态后,需要调用刷新方法同步界面显示:
$(document).ready(function() { $('.selectpicker').selectpicker('refresh'); });
为什么之前的方法不行?
- 直接传入数组到values属性:原生HTML的
<select>标签没有values属性,多选下拉的默认选中状态完全依赖<option>的selected属性,bootstrap-select也不支持这种设置方式。 - 两层foreach生成选项:外层遍历已选分类、内层遍历全部分类的写法,会导致每个已选分类都重新生成一遍全部选项,最终下拉框出现大量重复选项,不符合需求。
内容的提问来源于stack exchange,提问作者Quiet Molly
相关产品推荐
相关产品推荐

