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

Laravel Blade表单提交后如何保留下拉框选中数据?

表单提交后保留下拉框选中数据的解决方法

问题分析

你当前的代码存在两个核心问题:

  1. 控制器中编辑操作提交后未携带输入数据回显,导致old()函数无法读取到提交值;
  2. 视图中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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:05:22