甜蜜警报计时器 - 完成功能

时间:2015-04-29 13:45:35

标签: javascript jquery sweetalert

我一直在玩SweetAlert插件:Sweet alert

我想制作一个删除按钮,在实际删除之前会提示用户。当用户再次按“删除”时,则表示“已完成”,并且用户必须再次单击“确定”才能提示离开。

SweetAlert有一个计时器功能,所以你可以在几秒钟左右后自动关闭最后一个“完成”提示,这很好。它们还有一个功能,您可以在用户在“完成”提示下单击“确定”时实现要运行的功能。问题是,如果定时器完成后提示自动关闭,则不运行该功能。

有什么想法可以做到这一点?

没有运行定时器和功能:

swal({
     title: "Deleted!",
     text: "Your row has been deleted.",
     type: "success",
     timer: 3000
     },
     function () {
            location.reload(true);
            tr.hide();
     });

没有计时器,但有工作功能(点击“确定”按钮):

swal("Deleted!", "Your row has been deleted.", "success"), function () {
                        location.reload();
                        tr.hide();
                    };

5 个答案:

答案 0 :(得分:7)

<强>解释

我认为你必须将swal与功能区分开来。我的意思是显示swal,函数在后台运行,模态自动关闭。

<强>的Javascript / jQuery的:

swal({
     title: "Deleted!",
     text: "Your row has been deleted.",
     type: "success",
     timer: 3000
     });
     function () {
        location.reload(true);
        tr.hide();
     };

您的代码包含SweetAlert示例:

swal({
    title: "Are you sure?",
    text: "You will not be able to recover this imaginary file!",
    type: "warning",
    showCancelButton: true,
    confirmButtonColor: "#DD6B55",
    confirmButtonText: "Yes, delete it!",
    cancelButtonText: "No, cancel plx!",
    closeOnConfirm: false,
    closeOnCancel: false
    },
    function (isConfirm) {
        if (isConfirm) {
           swal({
              title: "Deleted!",
              text: "Your row has been deleted.",
              type: "success",
              timer: 3000
           });
           function () {
              location.reload(true);
              tr.hide();
           };
        }
        else {
            swal("Cancelled", "Your imaginary file is safe :)", "error");
        }
    });

答案 1 :(得分:4)

我找到了解决方案

目前我正在尝试使用sweetAlert,我找到了解决问题的方法 这是我创建sweetalert的自定义功能,它会在几秒计时器后关闭。

var sweetAlert = function(title, message, status, timer = 5000, isReload = false){
    swal({
        title   : title,
        text    : message + '<br/>This pop up will close automatically in <strong class="swal-timer-count">' + timer/1000 + '</strong> seconds...',
        type    : status,
        html    : true,
        timer   : timer,
        allowEscapeKey  : false
    }, function () {
        swal.close();
        if(isReload)
            location.reload(true);
    });
    var e = $(".sweet-alert").find(".swal-timer-count");
    var n = +e.text();
    setInterval(function(){
        n > 1 && e.text (--n);
    }, 1000);
}

您可以使用此代码调用此方法 请记住,计时器正在使用毫秒级。

sweetAlert('Congratulation!', 'You successfully copy paste this code', 'success', 3000, false);

答案 2 :(得分:3)

这个问题已经解决了Sweetalert 2的新版本

https://limonte.github.io/sweetalert2/

见Plunker

Plunker

.

答案 3 :(得分:1)

您仅使用then吗?

这样更干净。

swal({
    title: 'Login Success',
    text: 'Redirecting...',
    icon: 'success',
    timer: 2000,
    buttons: false,
})
.then(() => {
    dispatch(redirect('/'));
})

答案 4 :(得分:0)

解决方案在这里。

[https://sweetalert2.github.io/]

请参阅。 带有自动关闭计时器的消息

let timerInterval
Swal.fire({
  title: 'Auto close alert!',
  html: 'I will close in <strong></strong> milliseconds.',
  timer: 2000,
  onBeforeOpen: () => {
    Swal.showLoading()
    timerInterval = setInterval(() => {
      Swal.getContent().querySelector('strong')
        .textContent = Swal.getTimerLeft()
    }, 100)
  },
  onClose: () => {
    clearInterval(timerInterval)
  }
}).then((result) => {
  if (
    /* Read more about handling dismissals below */
    result.dismiss === Swal.DismissReason.timer
  ) {
    console.log('I was closed by the timer')
  }
})

我的代码

swal.fire({ type: 'success', title: 'Saved.', 
            showConfirmButton: false, timer: 1500 
}).then((result) => {
    if (result.dismiss === Swal.DismissReason.timer) {
         $("#new_reminder").modal("hide");                            
    }
});