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

Laravel中Dropdown下拉列表选中提交后重置,如何保持选中状态

解决方案

你遇到的问题核心有两个:一是原有Blade的选中判断逻辑存在类型匹配问题导致不生效,二是直接读取$_GET['smsstaff_key']时首次访问页面没有该参数导致报错。不需要额外加JS就能实现回显,按下面步骤修改即可:

步骤1:修复下拉框option的选中判断逻辑

你原来用的严格等于===会同时校验值和类型,如果smsstaff_key是数字类型,request()->input()返回的字符串会导致判断永远不成立,换成松散比较==即可,同时加个默认值兜底:

<select name="smsstaff_key" id="smsstaff_key" required>
    @foreach ($staff as $staffMember) 
        <option value="{{$staffMember->smsstaff_key}}" 
            {{ request()->input('smsstaff_key') == $staffMember->smsstaff_key ? 'selected' : '' }}>
            {{$staffMember->name}}
        </option>
    @endforeach
</select>

小优化:HTML里selected属性写全称selected="selected"和简写selected效果完全一致,简写更简洁。

步骤2(可选):修复你写的JS代码报错问题

如果你一定要用JS实现回显,不要直接读取$_GET,用Laravel的request()辅助函数加默认值就能避免不存在参数的报错:

<script type="text/javascript">
  document.getElementById('smsstaff_key').value = "{{ request()->input('smsstaff_key', '') }}";
</script>

加了第二个参数''作为默认值,当没有smsstaff_key参数时会返回空字符串,不会抛出索引不存在的错误。

额外注意事项

如果你的筛选请求走的是POST提交,还可以用Laravel的old()辅助函数实现回显,写法是{{ old('smsstaff_key') == $staffMember->smsstaff_key ? 'selected' : '' }},你当前是GET提交用request()->input就足够。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:36:03