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
相关产品推荐
相关产品推荐

