如何为数组每个元素调用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
相关产品推荐
相关产品推荐

