提交表单后如何保留下拉框选中值?(同页面提交)
表单提交后保留下拉框及单选按钮选中状态的解决方案
要解决表单提交到当前页面后保留下拉框、单选按钮选中状态的问题,结合你提供的Laravel Blade代码,只需借助Laravel的old()辅助函数,同时兼顾编辑场景和提交回显场景即可,具体修改如下:
1. 剧集下拉框(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}}" @if( (isset($episode_info->id) && $series_data->id == $episode_info->episode_series_id) || old('series') == $series_data->id ) selected @endif> {{$series_data->series_name}} </option> @endforeach </select> </div> </div>
2. 季下拉框(season)修改
原代码仅在编辑场景下渲染选项,调整后确保提交失败时也能显示对应季列表,同时添加old('season')判断:
<div class="form-group row"> <label class="col-sm-3 col-form-label">{{trans('words.seasons_text')}}*</label> <div class="col-sm-8"> <select class="form-control select2" name="season" id="episode_season_id"> <option value="">Select Season</option> @foreach($season_list as $i => $season_data) <option value="{{ $season_data->id }}" @if( (isset($episode_info->id) && $season_data->id == $episode_info->episode_season_id) || old('season') == $season_data->id ) selected @endif> {{ $season_data->season_name }} </option> @endforeach </select> </div> </div>
注意:控制器中需补充逻辑:当表单POST提交时,根据提交的
series参数重新获取对应的season_list并传递到视图,确保提交后季下拉框有正确的选项。
3. 单选按钮回显处理
以name为status的单选按钮为例,同样结合old()和编辑场景判断:
<div class="form-group row"> <label class="col-sm-3 col-form-label">状态*</label> <div class="col-sm-8"> <div class="form-check"> <input class="form-check-input" type="radio" name="status" value="active" @if( old('status') == 'active' || (isset($episode_info) && $episode_info->status == 'active') ) checked @endif> <label class="form-check-label">启用</label> </div> <div class="form-check"> <input class="form-check-input" type="radio" name="status" value="inactive" @if( old('status') == 'inactive' || (isset($episode_info) && $episode_info->status == 'inactive') ) checked @endif> <label class="form-check-label">禁用</label> </div> </div> </div>
核心原理
Laravel的old()函数会从session中读取上一次请求的输入值,优先于编辑场景的数据库值,完美适配表单提交失败后回显用户输入的场景;同时保留原有的$episode_info判断,确保编辑页面能正确显示数据库中的已有值。
内容的提问来源于stack exchange,提问作者Rafael Antonio Centeno
相关产品推荐
相关产品推荐

