如何让SweetAlert先执行并修改check变量的true/false值?
解决SweetAlert异步导致的变量判断问题
我来帮你搞定这个异步执行的坑!你当前的代码问题很典型:SweetAlert的弹窗回调是异步执行的,当你的代码跑到if (check == true)这一步时,用户还没来得及点击确认/取消按钮,check变量还是初始的null,所以永远会走return false的分支,完全等不到用户的选择结果。
核心问题分析
JavaScript中像SweetAlert这类弹窗的.then()回调是异步触发的——也就是说,Swal.fire()调用后会立即继续执行后面的代码,而不会等待用户操作弹窗。这就导致你的check变量判断逻辑跑在了用户选择之前,自然没法拿到正确的结果。
正确的实现方式
因为异步操作没法同步返回结果,我们需要换个思路:先阻止事件的默认行为,等用户确认后再执行原本要做的操作。不需要用check变量来中转,直接在回调里处理业务逻辑即可。
修改后的代码示例:
$("#our-table").on('click', '#button-delete', function (event) { // 第一步:阻止按钮的默认行为(比如表单提交、链接跳转等) event.preventDefault(); // 保存当前按钮的DOM引用,方便后续回调里使用 const deleteButton = $(this); Swal.fire({ title: 'Are you sure?', icon: 'warning', showCancelButton: true, confirmButtonColor: '#3085d6', cancelButtonColor: '#d33', confirmButtonText: 'Confirm' }).then((result) => { if (result.isConfirmed) { // 用户确认后,执行你原本要做的业务逻辑 // 示例1:删除当前按钮所在的表格行 deleteButton.closest('tr').remove(); // 示例2:如果是表单提交按钮,手动提交表单 // deleteButton.closest('form').submit(); // 示例3:如果是跳转链接,手动跳转 // window.location.href = deleteButton.attr('href'); } }); });
关键修改点
- 新增
event.preventDefault():阻止按钮的默认行为,避免在用户确认前就执行了删除/提交等操作。 - 去掉了无用的
check变量:直接在用户确认的回调里处理业务逻辑,不用再通过变量中转。 - 保存按钮引用:用
const deleteButton = $(this)把当前按钮的DOM对象存起来,方便在异步回调里使用(因为回调里的this指向会变)。
这样修改后,就能完美实现“先弹确认框,用户确认后再执行操作”的需求啦!
内容的提问来源于stack exchange,提问作者Tee Adkins
相关产品推荐
相关产品推荐

