gpt4 book ai didi

javascript - alertify.js 的递归导致自动关闭警报

转载 作者:行者123 更新时间:2023-11-29 22:15:56 28 4
gpt4 key购买 nike

我正在尝试将以下老派代码片段转换为 alertify.js 0.3.8:

window.doPrompt = function() {
var str;
do str = prompt("Enter your name");
while (str === "" && (alert("Can't be empty!") || true));
if (str) document.getElementsByTagName("body")[0].innerHTML += ("<pre>Your name is: " + str + "</pre>");
}

JSFiddle of the above

这是我第一次尝试的:

window.doPrompt = function() {
alertify.prompt(
"Enter your name",
function(confirmed, str) {
if (confirmed) {
if (str.length === 0) {
alertify.alert(
"Can't be empty!",
function() { doPrompt(); }
);
} else {
document.getElementsByTagName("body")[0].innerHTML += ("<pre>Your name is: " + str + "</pre>");
}
}
}
);
}

JSFiddle of the above

它没有按预期工作。例如,在 Firefox 19 中,如果您使用键盘提交空提示,“错误”警报只会显示很短的时间,然后会自行消失,这不是以前的工作方式。

我尝试通过在每个 alertify 调用周围插入对 window.setTimeout 的调用并将超时设置为 0 来打破递归。它没有帮助。

如果您可以向我推荐一个具有类似 API 的替代 JavaScript 库,我可以使用它(当然没有这个问题),那没关系。

最佳答案

看来不是alertify.js的问题,而是Firefox的问题。如果您搜索 bugs related to transitionend (在对话动画中使用,根据 the sources )您将看到您遇到的问题的一些潜在候选人(特别是 "transitionend event not fired when there are multiple transitions" )。这与您遇到的情况一致 - 如果您尝试在其他对话框仍在原位时显示一个对话框(即上一个对话框仍在过渡中),那么事情就会中断。

不过,我可以提供一个解决方法。它不漂亮,但可以完成工作。但首先,我在所有浏览器中发现了一个不相关的问题:

  1. 如果您将内容附加到body,库似乎会变得困惑;使用“目标”div 解决了这个问题:

    <div id="target"></div>
    ...
    document.getElementById("target").innerHTML += ("<pre>Your name is: " + str + "</pre>");
  2. 在显示警报和重新显示提示时,您都应该按照您的建议使用 setTimeout。但是,超时为零是不够的,因为这里的问题是在 transitionend 上。设置一个足够高的值,让前面的对话框完成隐藏,问题就解决了:

            setTimeout(function() {
    alertify.alert(
    "Can't be empty!",
    function() {
    setTimeout(function() {
    doPrompt();
    }, 500);
    }
    );
    }, 500);

    (如果该值不够高,它不仅会在 Firefox 上不断损坏,而且还会损坏 Chrome 等曾经可用的浏览器,所以请记住这一点)

Working example .在 Firefox 19.0、Chrome 25 和 Safari 4.0.4 中测试成功。

关于javascript - alertify.js 的递归导致自动关闭警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15125537/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com