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

Laravel表单验证:如何保留下拉框选中值?

如何在Laravel表单验证失败后保留下拉框的选中值

别担心,其实Laravel的old()方法完全可以用来处理下拉框的选中状态,只是需要在<option>标签里做个简单判断就行,和文本框的思路是一致的。

你的核心需求是:当验证失败时,让之前提交的period_id对应的选项自动选中。我们只需要在循环生成<option>的时候,对比当前选项的value和old('period_id')的值,如果匹配就添加上selected属性。

修改你的下拉框代码如下:

<select name="period_id" id="" class="form-control {{ $errors->has('period_id') ? ' is-invalid' : '' }}">
    <option value="" {{ old('period_id') == '' ? 'selected' : '' }}>Choose a period...</option>
    @foreach($plans as $plan)
        <option 
            value="{{ $plan->id }}" 
            {{ old('period_id') == $plan->id ? 'selected' : '' }}
        >
            {{ $plan->name }}
        </option>
    @endforeach
</select>
@if($errors->has('period_id'))
    <p style="color: red;"> {{ $errors->first('period_id') }}</p>
@endif

原理说明:

  • old('period_id')会返回你之前提交的请求中period_id的值(从会话中获取),就像你用它填充文本框一样。
  • 在每个<option>标签里,我们通过三元运算符判断:如果当前选项的value和old('period_id')相等,就输出selected="selected",让浏览器自动选中这个选项。
  • 第一个默认选项(Choose a period...)也做了同样的判断,确保如果之前没选任何选项,验证失败后这个默认选项依然保持选中状态。

额外提示:

如果你的表单是用于编辑已有数据(比如从数据库加载默认值),可以给old()方法传第二个参数作为初始默认值,比如:

{{ old('period_id', $product->period_id) == $plan->id ? 'selected' : '' }}

这样页面第一次加载时会选中数据库里的默认值,验证失败时则优先使用old()存储的提交值,完美兼顾新增和编辑场景。

内容的提问来源于stack exchange,提问作者user7301337

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:22:44