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

Laravel foreach循环中删除表单总是传递最后一条Post ID的解决方法

解决循环中删除按钮始终传递最后一条文章ID的问题

嗨,我来帮你搞定这个问题!你遇到的问题根源非常明确:所有删除表单都使用了同一个id="formDelete",而HTML里的id属性必须是唯一的——浏览器只会识别页面中最后一个拥有该id的元素,所以不管你点哪条记录的删除按钮,实际触发的都是最后一个表单的提交,自然只会传递最后一条文章的ID啦。

解决方法很简单,给每个表单生成唯一的标识即可,比如利用文章ID或者循环的key来区分:

修改后的代码示例:

@foreach($allPosts as $key => $posts) 
    ... 
    <td class="filterable-cell"> 
        <a href="{{ route('posts.edit', ['id' => $posts->id]) }}" class="btn btn-edit btn-edit-remove">
            <i class="fa fa-pencil"></i>
        </a> 
        <!-- 给表单设置唯一ID,用文章ID拼接区分 -->
        <form class="inline" action="{{ route('posts.destroy', $posts->id ) }}" method="post" id="formDelete-{{ $posts->id }}"> 
            {{ csrf_field() }} 
            <input name="_method" type="hidden" value="DELETE"> 
            <button class="delete-brand btn btn-remove btn-edit-remove border-box deletePage" type="submit">
                <i class="glyphicon glyphicon-trash top-3"></i>
            </button> 
        </form> 
    </td> 
    ... 
@endforeach

额外说明:

如果你的代码里没有针对这个表单ID的JavaScript操作,其实完全可以去掉表单的id属性——因为按钮本身就在对应的表单内部,点击按钮时会自动提交它所在的表单,只要每个表单的action里已经正确传入了对应文章的ID(你的代码里已经做到了这一点),就可以正常传递正确的ID到后端。

要是你有绑定这个ID的JS逻辑,记得把JS里的选择器改成动态匹配的方式,比如给所有删除表单加一个统一的class(比如class="delete-post-form"),然后通过类选择器来绑定事件,避免依赖唯一ID。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:32:34