Laravel Blade表单提交后如何保留下拉框选中数据?
表单提交后保留下拉框选中数据的解决方法
问题分析
你当前的代码存在两个核心问题:
- 控制器中编辑操作提交后未携带输入数据回显,导致
old()函数无法读取到提交值; - 视图中
old()函数的调用参数错误,选中状态的判断逻辑混乱。
修正步骤
1. 修正控制器代码
编辑分支需要添加->withInput(),确保提交后表单数据能被old()函数读取:
$episode_obj->save(); if(!empty($inputs['id'])){ \Session::flash('flash_message', trans('words.successfully_updated')); // 新增withInput(),保证编辑提交后也能回显数据 return \Redirect::back()->withInput(); }else{ \Session::flash('flash_message', trans('words.added')); return \Redirect::back()->withInput(); }
2. 修正视图下拉框的选中判断逻辑
下拉框的name属性是series,所以old()的参数应为'series',同时要兼顾编辑场景下的默认选中状态:
<div class="form-group row"> <label class="col-sm-3 col-form-label">{{trans('words.shows_text')}}*</label> <div class="col-sm-8"> <select class="form-control select2" name="series" id="episode_series_id"> <option value="">{{trans('words.select_show')}}</option> @foreach($series_list as $series_data) <option value="{{$series_data->id}}" @selected( old('series') == $series_data->id || (isset($episode_info->id) && $series_data->id == $episode_info->episode_series_id) )> {{$series_data->series_name}} </option> @endforeach </select> </div> </div>
关键说明
old('series')获取的是表单提交时name="series"对应的输入值,也就是选中项的value;@selected是Laravel Blade的专用指令,会自动生成selected属性,比手动写@if判断更简洁;- 判断逻辑优先使用
old()的值(提交后的回显数据),其次才是编辑场景下的原有数据,确保提交后优先显示用户选择的选项。
内容的提问来源于stack exchange,提问作者Rafael Antonio Centeno
相关产品推荐
相关产品推荐

