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

