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
相关产品推荐
相关产品推荐

