Confirm弹窗点击取消为啥还会执行后续操作?

打工人正汉 阅读 30

我在用原生JS写一个删除确认逻辑,点了“取消”按钮,结果后面的删除代码还是执行了,这不应该啊?

我试过用 if (confirm(...)) { ... } 包裹,但好像没起作用,是不是我哪里理解错了?

function handleDelete() {
  confirm('确定要删除吗?');
  // 无论点确定还是取消,下面这行都会执行
  api.deleteItem().then(() => console.log('已删除'));
}
我来解答 赞 7 收藏
二维码
手机扫码查看
2 条解答
思捷(打工版)
你在使用 confirm 方法时,没有检查它的返回值。confirm 会返回一个布尔值,点确定返回 true,点取消返回 false。你需要根据这个返回值来决定是否执行删除操作。

你可以这样改一下你的代码:

function handleDelete() {
if (confirm('确定要删除吗?')) {
api.deleteItem().then(() => console.log('已删除'));
} else {
console.log('取消删除');
}
}


这样,只有当用户点击“确定”时,才会执行 api.deleteItem() 这个删除操作。点“取消”时,会执行 else 里的代码,或者什么都不做,看你怎么安排。
点赞
2026-03-20 17:07
欧阳宁宁
你的问题在于没有用confirm的返回值。confirm()会返回布尔值:点确定返回true,点取消返回false,但你没用这个返回值判断,当然会一直执行。

改一下就行:

function handleDelete() {
if (confirm('确定要删除吗?')) {
api.deleteItem().then(() => console.log('已删除'));
}
}


或者先存一下返回值也行:

function handleDelete() {
const confirmed = confirm('确定要删除吗?');
if (confirmed) {
api.deleteItem().then(() => console.log('已删除'));
}
}


confirm()只是弹窗,它本身不会阻止代码执行,得靠返回值来决定是否继续走删除逻辑。
点赞 1
2026-03-11 22:05