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

如何为数组每个元素调用SweetAlert1.0?循环仅弹出最后一个元素的问题

问题原因

$.each是同步循环,会一次性触发所有swal()调用,但SweetAlert 1.0同一时间只能存在一个弹窗实例,后续的弹窗会直接覆盖前面的,因此最终仅显示数组最后一个元素的弹窗。

解决方案

改用递归方式逐个处理数组元素,等待当前弹窗关闭后再触发下一个弹窗,确保弹窗依次显示。

修改后的代码示例

let array_letters = ["A", "B", "C"];
let currentIndex = 0;

function showNextAlert() {
    // 遍历完数组则停止
    if (currentIndex >= array_letters.length) return;

    let letter = array_letters[currentIndex];
    swal({
        title: "Print " + letter + "?", // 修正原代码中未定义的swal_title,替换为当前遍历的letter
        type: "warning",
        closeOnConfirm: true,
        showConfirmButton: true,
        confirmButtonText: "Yes",
        showCancelButton: true,
        closeOnCancel: true,
        // 点击确认后的回调
        onConfirm: function() {
            // 可添加确认后的业务逻辑,比如打印当前letter
            console.log("确认打印:", letter);
            currentIndex++;
            showNextAlert();
        },
        // 点击取消后的回调
        onCancel: function() {
            // 可添加取消后的业务逻辑
            console.log("取消打印:", letter);
            currentIndex++;
            showNextAlert();
        }
    });
}

// 启动第一个弹窗
showNextAlert();

关键说明

  • 通过递归函数showNextAlert控制弹窗的顺序触发,每次弹窗关闭(无论确认或取消)后,才会处理数组的下一个元素。
  • 修正了原代码中swal_title未定义的问题,替换为当前遍历的letter,确保弹窗标题正确显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 00:00:02