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

Laravel 10下拉菜单选中值更新功能异常问题排查

问题解决步骤

1. 修正表单提交方法

你的表单使用了method="get",但PUT请求必须通过POST方法提交(浏览器原生不支持PUT,需依赖@method('put')模拟),这会导致提交的数据无法被后端正确识别,修改表单的method属性:

<form method="post" action="{{route('receipts.update', ['receipts' => $receipts])}}">
    @csrf   
    @method('put')
    <!-- 其他表单元素 -->
</form>

2. 修复下拉菜单的选项设置

你当前的下拉选项所有value都绑定了{{$receipts->cost}},这会引发两个核心问题:

  • 无法正确显示数据库中的选中值(所有选项value一致,浏览器只会默认选中第一个)
  • 提交时永远传递旧值,无法保存新选择的内容

修改下拉菜单为以下写法,每个选项使用固定value,同时通过old()函数兼顾验证失败后的输入保留:

<div>
    <label for="cost">Cost Center:</label>
    <select name="cost" id="cost">
        <option value="Personal" {{ (old('cost', $receipts->cost) == 'Personal') ? 'selected' : '' }}>Personal</option>
        <option value="CC1" {{ (old('cost', $receipts->cost) == 'CC1') ? 'selected' : '' }}>CC1</option>
        <option value="CC2" {{ (old('cost', $receipts->cost) == 'CC2') ? 'selected' : '' }}>CC2</option>
        <option value="CC3" {{ (old('cost', $receipts->cost) == 'CC3') ? 'selected' : '' }}>CC3</option>
        <option value="Other" {{ (old('cost', $receipts->cost) == 'Other') ? 'selected' : '' }}>Other</option>
    </select>
</div>
  • old('cost', $receipts->cost):优先使用用户上次提交的旧值(比如验证失败返回表单时),无旧值则用数据库中当前的cost值
  • 通过三元判断,当选项value与目标值匹配时添加selected属性,实现默认选中效果

3. 验证模型批量赋值配置(可选)

确保Receipts模型中已正确设置$fillable属性,允许cost字段被批量赋值:

// app/Models/Receipts.php
protected $fillable = ['payee', 'amount', 'date', 'description', 'cost'];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 23:32:11