在单击“确定”按钮之前立即关闭甜蜜警报,或者在出现甜蜜警报时按回车键

sweet alert immidiately closed before click OK button or hit enter when sweet alert appeared

我是新手,使用 sweet alert,首先我会展示代码:

    $('#byr').keydown(function (e){
      var bayar = Number($('#byr').val());
      var total = Number($('.rp-harga').text());
      var kmb = $('.rp-kmb').text();

      if(e.keyCode == 13)
      {
        if(bayar<total)
        {
          alert("Uang Anda Kurang");
        }
        else {
          swal("Transaksi Berhasil", "Kembalian : Rp " + (bayar-total).toString(), "success");
        }
      }
    });

问题是当我在用 else 条件填充输入文本后按回车键时,它会显示甜蜜警报,但在我单击“确定”按钮或出现甜蜜警报时按回车之前,甜蜜警报会立即关闭

我尝试添加 e.preventDevaults(),但遇到了这些问题:

  1. 如果我在 swal 代码之前添加它,则警报不会出现在其他条件中
  2. 如果我在 swal 代码之后添加它,也会发生同样的问题(swal 在单击确定/回车之前立即关闭)。

Here 是一个可以解决我的问题的 JSFiddle。

我假设您正在使用 sweetalert2。这个插件有一个配置选项:

allowEnterKey: If set to false, the user can't confirm the modal by pressing the Enter or Space keys, unless they manually focus the confirm button.

因此您可以:

  • 禁用此功能,将 allowEnterKey 设置为 false
  • 在 10 毫秒后调用 swal 以克服第一个按键的以下 src 代码:

    window.onkeydown = handleKeyDown;

$('#byr').keydown(function (e) {
    var bayar = Number($('#byr').val());
    var total = 0;

    if (e.keyCode == 13) {
        if (bayar < total) {
            alert("Uang Anda Kurang");
        }
        else {
            setTimeout(function() {
                swal({
                    title: "Transaksi Berhasil",
                    text: "Kembalian : Rp " + (bayar - total).toString(),
                    type: "success",
                    allowEnterKey: true // default value
                });
            }, 10)
        }
    }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/sweetalert2/6.6.2/sweetalert2.min.css">
<script src="https://cdn.jsdelivr.net/sweetalert2/6.6.2/sweetalert2.min.js"></script>

<input type="text" id="byr">