You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Sweet Alert 2复选框值与确认值冲突问题求助

解决SweetAlert2复选框与表单提交的问题

我明白你的问题了——你想用SweetAlert2的复选框来区分软删除和强制删除,但当前代码只有勾选复选框时才会提交表单,未勾选时因为result.value是0,导致提交条件不满足。其实只要调整一下判断逻辑,同时把复选框的值传递给表单就可以解决了。

修改后的代码

$(document).on("click", "#deleteUploadedFile", function () {
  Swal.fire({
    title: 'Are you sure you want to remove selected uploads?',
    icon: 'warning', // 注意:SweetAlert2新版本已用icon替代旧的type参数
    input: 'checkbox',
    inputValue: 1,
    inputPlaceholder: 'Delete Permanently',
    showCancelButton: true,
    confirmButtonColor: '#3085d6',
    cancelButtonColor: '#d33',
    confirmButtonText: 'Yes, Remove them!',
  }).then((result) => {
    console.log(result);
    // 只要用户点击确认按钮,就执行表单提交逻辑
    if (result.isConfirmed) {
      // 先移除可能存在的同名隐藏字段,避免重复提交
      $('#deleteUploadsForm input[name="permanent_delete"]').remove();
      // 动态添加隐藏字段,将复选框状态传递给服务器
      $('#deleteUploadsForm').append(`<input type="hidden" name="permanent_delete" value="${result.value}">`);
      // 提交表单
      $('#deleteUploadsForm').submit();
    }
  })
});

关键调整说明

  1. 调整确认判断逻辑
    原来的if (result.value)会把未勾选时的0判定为false,导致不提交。改成if (result.isConfirmed)后,只要用户点击了确认按钮(不管复选框是否勾选),都会进入提交流程。

  2. 传递复选框值到服务器
    通过动态添加一个隐藏的input字段,把SweetAlert2返回的result.value(勾选时为1,未勾选时为0)传递给表单。服务器端可以通过字段名permanent_delete获取这个值,进而执行软删除(值为0)或强制删除(值为1)的逻辑。

  3. 适配SweetAlert2新版本
    旧版的type参数在新版本中已经被icon替代,所以建议改成icon: 'warning'以保证兼容性。

这样修改后,不管用户是否勾选复选框,点击确认按钮都会提交表单,同时服务器能拿到复选框的状态来处理对应的删除逻辑。

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

火山引擎 最新活动