Laravel页面刷新后保留下拉选择框选中值的问题
问题:Blade下拉选择框无法保留旧选中值
我原本的Blade下拉框代码:
<select id="Priority_id" style="width:180px;" class="myform-select"> <option value="" selected>Select priority</option> @foreach ($priorities as $priority) <option value="{{ $priority->id }}"> {{ $priority->Desc }} </option> @endforeach </select>
为了保留表单提交后的旧选中值,我改成了这样:
<select id="Priority_id" style="width:180px;" class="myform-select"> <option value="" selected>Select priority</option> @foreach ($priorities as $priority) <option value="{{ $priority->id }}" {{ ( old('Priority_id')==$priority->id ? "selected":"") }}> {{ $priority->Desc }} </option> @endforeach </select>
但页面刷新后,下拉框还是没法保留之前选中的值。
解决方法:
给select添加name属性:
old()函数依赖表单提交的字段名获取旧值,你的select只有id没有name,后端接收不到这个字段的值,自然没法通过old()回显。修改后:<select id="Priority_id" name="Priority_id" style="width:180px;" class="myform-select">修正默认选项的selected逻辑:原来的默认选项硬写
selected会覆盖old()的选中状态,应该改成只有无旧值时才选中默认选项:<option value="" {{ old('Priority_id') === null ? 'selected' : '' }}>Select priority</option>确保类型匹配:如果
old('Priority_id')是字符串、$priority->id是整数,直接用==可能出现隐式转换问题,建议统一类型后再比较:{{ (string)old('Priority_id') === (string)$priority->id ? 'selected' : '' }}
最终完整代码:
<select id="Priority_id" name="Priority_id" style="width:180px;" class="myform-select"> <option value="" {{ old('Priority_id') === null ? 'selected' : '' }}>Select priority</option> @foreach ($priorities as $priority) <option value="{{ $priority->id }}" {{ (string)old('Priority_id') === (string)$priority->id ? 'selected' : '' }}> {{ $priority->Desc }} </option> @endforeach </select>
内容的提问来源于stack exchange,提问作者mahdi.gh
相关产品推荐
相关产品推荐

