Javascript 使用alertify.js的递归导致自动关闭警报
我正在尝试将以下老式代码段转换为0.3.8:Javascript 使用alertify.js的递归导致自动关闭警报,javascript,callback,settimeout,alert,nonblocking,Javascript,Callback,Settimeout,Alert,Nonblocking,我正在尝试将以下老式代码段转换为0.3.8: window.doPrompt=function(){ var-str; do str=提示(“输入您的姓名”); 而(str==”&&(警告(“不能为空!”)| | true)); if(str)document.getElementsByTagName(“body”)[0].innerHTML+=(“您的名字是:“+str+”); window.doPrompt = function() { alertify.prompt( "Ent
window.doPrompt=function(){
var-str;
do str=提示(“输入您的姓名”);
而(str==”&&(警告(“不能为空!”)| | true));
if(str)document.getElementsByTagName(“body”)[0].innerHTML+=(“您的名字是:“+str+”);
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>");
}
}
}
);
}
setTimeout(function() {
alertify.alert(
"Can't be empty!",
function() {
setTimeout(function() {
doPrompt();
}, 500);
}
);
}, 500);
}
这是我第一次尝试的:
<div id="target"></div>
...
document.getElementById("target").innerHTML += ("<pre>Your name is: " + str + "</pre>");
window.doPrompt=function(){
提醒(
“输入您的姓名”,
功能(已确认,str){
如果(已确认){
如果(str.length==0){
警惕(
“不能是空的!”,
函数(){doPrompt();}
);
}否则{
document.getElementsByTagName(“body”)[0].innerHTML+=(“您的名字是:“+str+”);
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>");
}
}
}
);
}
setTimeout(function() {
alertify.alert(
"Can't be empty!",
function() {
setTimeout(function() {
doPrompt();
}, 500);
}
);
}, 500);
}
}
}
);
}
它没有按预期工作。例如,在Firefox 19中,如果您使用键盘将提示提交为空,“错误”警报只会显示很短的时间,然后会自动消失,这不是它以前的工作方式
我尝试通过插入对窗口的调用来中断递归。在每次alertify调用周围设置超时,将超时设置为0
。这没用
如果您可以推荐一个具有类似API的JavaScript库供我使用(当然没有这个问题)。alertify.js似乎没有问题,但是Firefox有问题。如果搜索(在对话框动画中使用,根据),您将看到您遇到的问题的一些潜在候选对象(尤其是)。这与你所经历的是一致的——如果你试图显示一个对话框,而另一个仍然在原地(即前一个对话框仍然处于过渡的中间),那么事情就中断了。
不过,我可以提供一个解决办法。这并不漂亮,但能完成任务。但首先,我在所有浏览器中都发现了一个不相关的问题:
如果将内容附加到正文
,库似乎会变得混乱;使用“目标”div
解决了以下问题:
(如果该值不够高,那么它不仅会在Firefox上继续失效,而且会在Chrome等浏览器正常工作时失效,所以请记住这一点)
。在Firefox 19.0、Chrome 25和Safari 4.0.4中成功测试