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

多提交按钮表单数据提交异常:点击任意按钮均传递accepted值

问题解决:表单双提交按钮无法正确传递状态值

问题原因

你的表单中存在多个name="status"的输入字段(原有状态、Accepted、Rejected),提交时浏览器会发送所有同名字段值,后端默认取第一个匹配值(也就是Accepted),导致无论点击哪个按钮,都只会传递Accepted。同时,<form>直接包裹<tr>不符合HTML规范,可能引发渲染或提交异常。

解决方案

方案一:通过提交按钮直接传递状态(推荐)

移除所有重复的status隐藏字段,给两个提交按钮设置相同的name="status"和对应的值,点击按钮时会自动将对应值发送到后端:

@foreach($attendance as $request)
<div class="form-wrapper">
    <form method="POST" action="/update">
        @csrf
        <tr>
            <th scope="row">
                <div class="mb-3">
                    <label class="form-label">{{$request['id']}}</label>
                    <input type="hidden" value="{{$request['id']}}" name="id" class="form-control">
                </div>
            </th>
            <td>
                <div class="mb-3">
                    <label class="form-label">{{$request['name']}}</label>
                    <input type="hidden" value="{{$request['name']}}" name="name" class="form-control">
                </div>
            </td>
            <td>
                <div class="mb-3">
                    <label class="form-label">{{$request['class']}}</label>
                    <input type="hidden" value="{{$request['class']}}" name="class" class="form-control">
                </div>
            </td>
            <td>
                <div class="mb-3">
                    <label class="form-label">{{$request['roll_number']}}</label>
                    <input type="hidden" value="{{$request['roll_number']}}" name="rollnumber" class="form-control">
                </div>
            </td>
            <td>
                <div class="mb-3">
                    <label class="form-label">{{$request['subject_name']}}</label>
                    <input type="hidden" value="{{$request['subject_name']}}" name="subject" class="form-control">
                </div>
            </td>
            <td>
                <div class="mb-3">
                    <label class="form-label">{{$request['attendance']}}</label>
                    <input type="hidden" value="{{$request['attendance']}}" name="attendance" class="form-control">
                </div>
            </td>
            <td>
                <div class="mb-3">
                    <label class="form-label">{{$request['status']}}</label>
                    <!-- 若需要保留原始状态,可重命名字段避免冲突 -->
                    <input type="hidden" value="{{$request['status']}}" name="original_status" class="form-control">
                </div>
            </td>
            <td>
                <button type="submit" class="btn btn-success" name="status" value="accepted">Accept</button>
                <button type="submit" class="btn btn-warning" name="status" value="rejected">Reject</button>
            </td>
        </tr>
    </form>
</div>
@endforeach

注:建议给每个表单添加包裹元素(如div.form-wrapper),避免<form>与<tr>直接同级的HTML结构问题。

方案二:JavaScript动态修改隐藏字段值

若需保留隐藏字段,可通过点击事件动态修改status值后提交表单:

@foreach($attendance as $request)
<form class="d-sm-inline-block" method="POST" action="/update">
    @csrf
    <tr>
        <!-- 其他字段保持不变 -->
        <td>
            <div class="mb-3">
                <input type="hidden" name="status" class="form-control status-field">
            </div>
            <button type="button" class="btn btn-success accept-btn">Accept</button>
            <button type="button" class="btn btn-warning reject-btn">Reject</button>
        </td>
    </tr>
</form>
@endforeach

<script>
// 绑定Accept按钮事件
document.querySelectorAll('.accept-btn').forEach(btn => {
    btn.addEventListener('click', () => {
        const form = btn.closest('form');
        form.querySelector('.status-field').value = 'accepted';
        form.submit();
    });
});

// 绑定Reject按钮事件
document.querySelectorAll('.reject-btn').forEach(btn => {
    btn.addEventListener('click', () => {
        const form = btn.closest('form');
        form.querySelector('.status-field').value = 'rejected';
        form.submit();
    });
});
</script>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:05:18