Javascript 使用alertify.js的递归导致自动关闭警报

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

我正在尝试将以下老式代码段转换为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(
    "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中成功测试