使用alertify.js递归会导致自动关闭警报
Recursion with alertify.js leading to auto-closing alerts
我正在尝试将以下旧学校片段转换为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>");
}
这是我第一次尝试的:
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>");
}
}
}
);
}
没有按预期工作。例如,在Firefox 19中,如果您使用键盘提交提示为空,则"error"警告将只显示很短的时间,然后自行消失,这与以前的工作方式不同。
我试图通过在每个警报调用周围插入对window.setTimeout
的调用并将超时设置为0
来打破递归。没用。
如果你能给我推荐一个有类似API的替代JavaScript库,我可以使用(当然不会有这个问题)。
这似乎不是alertify.js
的问题,但与Firefox。如果您搜索与transitionend
相关的bug(根据来源,在对话框动画中使用),您将看到您正在遇到的问题的一些潜在候选问题(特别是"当有多个转换时未触发transitionend事件")。这与你所经历的是一致的——如果你试图在其他对话框还在的时候显示一个对话框(即前一个对话框还在过渡的中间),那么事情就会中断。
我可以提供一个变通方法。虽然不好看,但能完成任务。但首先,我在所有浏览器中都发现了一个无关的问题:
-
库似乎变得混乱,如果你追加东西到
body
;使用"target"div
来解决这个问题:<div id="target"></div> ... document.getElementById("target").innerHTML += ("<pre>Your name is: " + str + "</pre>");
-
当显示警报和重新显示提示时,您应该按照建议使用
setTimeout
。但是,超时为零是不够的,因为这里的问题是在transitionend
上。设置一个足够高的值,使前一个对话框完成隐藏,问题被修复:setTimeout(function() { alertify.alert( "Can't be empty!", function() { setTimeout(function() { doPrompt(); }, 500); } ); }, 500);
(如果该值不够高,它不仅会在Firefox上被破坏,还会破坏像Chrome这样的浏览器,所以请记住这一点)
工作的例子。
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- 使用agility.js进行页面布局和合成
- 使用Clipboard.js复制span文本
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 强制模板刷新ember.js
- 如何编写HTML输入的JS内联
- Angular JS IE9 Hashbang url rewriting
- 使用JS将数组转换为json对象
- Node.js v6.2.0类扩展不是函数错误
- 当js函数's已执行
- 要求未定义JS回调参数
- 在自定义mean.io包中使用angular-chart.js作为依赖项
- 无法在数据endVal中设置值=“”;{{ucount}}”;使用Angular JS的CountUp
- 如何从Java/scala调用js美化程序
- 如何更改<svg>标记为<img>用js标记
- 如何使用 node.js 比较两个 json 数组
- 是否可以将alertify.js的cancel按钮和onclose调用的操作分开
- 如何使用 JavaScript 将图像插入 alertify.js alert
- 如何在Alertify.js提示符上附加一个掩码
- 使用alertify.js递归会导致自动关闭警报