点击确认弹窗后怎么阻止删除操作执行?
我在做一个删除功能时遇到问题,给删除按钮绑定了点击事件,用了confirm弹窗确认,但不管点确定还是取消都会执行删除操作。我明明写了if判断,这是哪里出错了?
代码是这样的:
document.querySelector('.delete-btn').addEventListener('click', function(e) {
e.preventDefault();
const confirmDelete = confirm('确定删除吗?');
if(confirmDelete) {
// 发送删除请求
fetch('/api/delete', {method: 'DELETE'});
}
});
奇怪的是,就算点取消按钮,后端还是收到了删除请求。我是不是漏掉了什么关键步骤?难道不是只有确定才会执行fetch吗?
直接用 preventDefault 是对的,但得确保整个流程都阻断了。你可以试试把删除按钮的类型明确设成 button,防止误提交:
如果已经是 button 类型,那就检查下有没有多个事件监听或者父级元素也在发请求。还有一个稳妥写法是在 confirm 前加个 return 判断,虽然这里不影响逻辑,但能更清楚地看出控制流:
先加上 stopPropagation 看看,大概率是你没意识到的地方还绑了另一个事件。再不行就全局搜一下 delete 接口是不是别的地方也在调。