多个带唯一ID、相同class的删除按钮,JS始终读取首个值如何解决
问题根源
你原有代码的核心问题出在var id = $(".delete").val();这行:$(".delete")会选中页面上所有带delete类的按钮,jQuery的val()方法默认只会返回第一个匹配元素的value值,所以不管你点击哪个按钮,拿到的永远是第一条评价的id,自然每次都只会删除第一条记录。
解决方案
只需修改JS代码,把当前点击按钮对应的id传入删除函数即可,修改后代码如下:
// 给删除函数新增参数,接收外部传入的对应记录id function delete_recommendation(id){ var action = "fetch_data"; $.ajax({ url: "include/recommendation.php", method: "POST", data: {id:id}, success: function(){ $('#deleted'+id).html('Removed!') $('#deleted'+id).addClass('text-danger') $('#delete'+id).addClass('d-none') } }); } $('.delete').click(function(e){ // 阻止submit按钮的默认表单提交行为,避免页面意外刷新 e.preventDefault(); // 只获取当前点击按钮的value值,也就是对应要删除的记录id var currentId = $(this).val(); // 把当前id传给删除函数 delete_recommendation(currentId); });
可选优化建议
- 可以增加删除确认弹窗,避免用户误操作
- 后端处理删除请求时必须做权限校验,防止越权删除其他用户的评价
- 可给AJAX增加error回调,删除失败时给用户对应提示
内容的提问来源于stack exchange,提问作者Sinny14
相关产品推荐
相关产品推荐

