Laravel 9 Blade多选框验证后旧值不显示问题
Laravel Blade多选框验证后旧值不显示的解决方法
问题核心:多选下拉框的name属性带[],验证失败后old($detail_id)返回的是数组类型,你原代码中用old($detail_id) == $value的方式比较数组和字符串,永远不会匹配,因此无法保留选中状态。
修正后的代码
<select class='form-select @error($detail_id) is-invalid @enderror' id="{{ $detail_id }}" name="{{ $detail_id }}[]" {{ $size }} {{ $multiple }} {{ $disabled }} required="required"> @foreach ($values as $key => $value) <option value="{{ $value }}" {{ in_array($value, old($detail_id, [])) ? 'selected' : '' }}>{{ $value }}</option> @endforeach </select>
关键说明
- 使用
in_array()函数检查当前选项值是否存在于old()返回的数组中 - 给
old()第二个参数传空数组[],避免当没有旧值时old()返回null,导致in_array()报错
内容的提问来源于stack exchange,提问作者veritexx
相关产品推荐
相关产品推荐

