javascript - 基于 if 语句链接额外的 Sweet Alerts

标签 javascript jquery sweetalert sweetalert2

我正在尝试使用 SweetAlert2 创建分步表单,并且我需要能够根据 if 语句在链接中添加额外的步骤。

例如,在我的第三个模态中,我可能有一个单选问题,上面写着“你会带加号 1 吗?”,如果用户选择“true”,我需要弹出一个额外的阶段,询问“姓名”加一',如果用户选择 false 则继续。

swal.mixin({
        confirmButtonText: 'Next →',
        showCancelButton: true,
        progressSteps: ['1', '2', '3', '4']
      }).queue([
        {
            title: 'Which event?',
            text: 'Please start by selecting the event you would like to book in!',
            input: 'select',
            inputClass: 'swal-select-event',
            inputPlaceholder: 'Please Select',
            inputOptions: {
                '1' : 'Dance Event',
                '2' : 'Football Event'
            },
            inputValidator: (value) => {
                return new Promise((resolve) => {
                  if (value === '') {
                    resolve('You need to select an event!')
                  } else {
                    resolve()
                  }
                })
            }
        },
        {
            title: 'What Day?',
            text: 'Which day are they due to come in?',
            html:'<input id="swal-booking-date-select" type="date"/>',
            preConfirm: () => {
                return document.getElementById('swal-booking-date-select').value
            },
            inputValidator: (value) => {
                return new Promise((resolve) => {
                  if (value === '') {
                    resolve('You need to select a date!')
                  } else {
                    resolve()
                  }
                })
            }
        },
        {
            title: 'Plus one?',
            text: 'Will you be bringing a plus one with you?',
            input: 'radio',
            inputOptions: {
                    'yes' : 'Yes',
                    'no' : 'No'
                },
            inputValidator: (value) => {
                return new Promise((resolve) => {
                    if (value === null) {
                        resolve('I need to know if you will be bringing a plus 1!')
                    } else if(value === 'yes') {


                        //EXTRA STAGE GOES HERE TO GET PLUS ONE NAME


                    } else {
                        resolve()
                    }
                })
            }
        },
        {
            title: 'What else?',
            input: 'text',
            text: 'Any other information that needs noting for this booking?'
        }
      ]).then((result) => {
        if (result.value) {
            //Do something with all of the data here
        }
      })

有人知道这是否可行吗?

最佳答案

一种方法是使用一个简单的 Swal 实例来执行额外的可选步骤...并将该值保留在全局声明的旁路变量中。

var plus1name="";

为了清楚起见,我不会重复您的所有代码,因为它们没有改变。这是要添加的新部分:

//EXTRA STAGE GOES HERE TO GET PLUS ONE NAME
swal({
  title:"Plus one!",
  text:"What is his/her name?",
  input:"text"
}).then(function(value){
  plus1name = value;
  resolve();
});

然后在.then(result)部分:

//Do something with all of the data here

swalResults = result.value;
swalResults.push(plus1name.value)
console.log(swalResults);

所以你有一个包含所有答案的数组。额外的问题被推到了最后,所以数组中的顺序不是问的顺序...

我在 CodePen 上工作过.

关于javascript - 基于 if 语句链接额外的 Sweet Alerts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50709734/

相关文章:

来自 'HH-MM' 形式字符串的 Javascript 日期对象

javascript - ajax提交后从javascript更新所有url总键

javascript - Sweet Alert JS无法获取输入变量

html - Sweetalert 2 占位符不透明度

javascript - 如何使用 sweetAlert js 重定向 chice 上的警报按钮?

javascript - 使用 javascript 从 ul li 获取每个层次结构级别的字符串行

javascript - 使用 setInterval 调用对象内部的方法不起作用

javascript - Chrome 更新破坏了我的滚动子菜单

javascript - jQuery 1.10.2 选择器在 IE 中损坏了吗?

javascript - modalDialog 带有 Angular 、范围问题的指令