Laravel下拉框旧输入值多语言适配问题求助
解决Laravel下拉框多语言环境下旧输入值保留问题
我明白你碰到的问题了——核心根源是你搞混了表单提交的value值和页面显示的翻译文本的区别。
当用户选择s/w这类带翻译的选项时,表单实际提交的是value="s/w",所以old('color')存储的是s/w,而不是翻译后的b/w(英文环境下)。但你现在的判断条件是把old('color')和@lang('s/w')(也就是翻译后的文本)做对比,这两者肯定不相等,自然就无法保留选中状态了。
正确的解决方案
你只需要让判断条件和option的value属性值保持一致就行,翻译只用于显示选项文本,不要掺和到旧值判断里。
修正后的下拉框代码如下:
<select name="color" class="form-control form-control-sm"> <option value="4c" {{ old('color') == "4c" ? "selected" : "" }}>4c</option> <option value="s/w" {{ old('color') == "s/w" ? "selected" : "" }}>@lang('s/w')</option> <option value="3c" {{ old('color') == "3c" ? "selected" : "" }}>3c</option> <option value="s/w + rot" {{ old('color') == "s/w + rot" ? "selected" : "" }}>@lang('s/w + rot')</option> <option value="s/w + gelb" {{ old('color') == "s/w + gelb" ? "selected" : "" }}>@lang('s/w + gelb')</option> <option value="s/w + blau" {{ old('color') == "s/w + blau" ? "selected" : "" }}>@lang('s/w + blau')</option> </select>
补充说明
old('color')保存的是用户提交的value属性内容,和页面显示的翻译文本完全无关- 翻译函数
@lang()只负责把选项文本转换成对应语言,不会影响表单提交的实际值 - 所有选项的判断逻辑统一用
value值和old()对比,不管是否需要翻译,这样就能确保多语言环境下旧输入值的选中状态正常保留了
内容的提问来源于stack exchange,提问作者ofmiceandmoon
相关产品推荐
相关产品推荐

