You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 03:42:33