You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sweetalert2如何检测Cancel按钮 点击取消/弹窗外不触发Ajax及错误提示

解决方案

核心原因是 SweetAlert2 的then回调会在弹窗关闭时触发,不管是点击确认、取消还是关闭弹窗都会进入该回调,你需要对回调的返回结果做判断后再执行对应逻辑。

核心修改点

  • then回调接收的result对象包含用户操作的状态标识,仅当result.isConfirmed为true时代表用户点击了确认按钮,此时再执行后续的错误提示逻辑即可。
  • 你原有代码中放在preConfirm内的Ajax逻辑本身就仅会在用户点击确认按钮时执行,天然不会在取消/关闭弹窗场景触发,无需额外调整。

修改后完整代码

$(function() {
  $('.user-details').click(function(e) {
    e.preventDefault();
    Swal.fire({
      title: 'Are you sure?',
      text: '',
      icon: 'question',
      showCancelButton: true,
      showLoaderOnConfirm: true,
      reverseButtons: true,
      preConfirm: function() {
        console.log('AJAX request');
        return new Promise(function(resolve, reject) {
          setTimeout(function() {
            resolve();
          }, 1200);
        });
      },
    }).then(function(result) {
      // 仅点击确认按钮时执行后续逻辑
      if (result.isConfirmed) {
        Swal.fire({
          title: 'Error!',
          text: 'I want to show this, only after clicking OK!',
          icon: 'error',
          showCancelButton: false,
          showLoaderOnConfirm: false,
        });
      }
    });
  });
});

HTML代码无需调整。
修改后点击取消按钮、点击模态框外部、按ESC关闭弹窗时都会直接关闭窗口,不会执行Ajax逻辑也不会弹出错误提示。

内容的提问来源于stack exchange,提问作者Jim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 16:57:03