多提交按钮表单数据提交异常:点击任意按钮均传递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
相关产品推荐
相关产品推荐

