Javascript JS-暂停自定义警报()
我编辑了默认的Javascript JS-暂停自定义警报(),javascript,jquery,Javascript,Jquery,我编辑了默认的alert()函数,如下所示: window.alert = function(str){ //custom alert } 基本上,新函数将显示一个HTML模式 背景故事: 我想回答这个问题,因为我有个问题。警报将隐藏,并在调用自定义警报函数时显示。因此,自定义警报基本上是显示元素并更改其文本因此,当我有多个alert()调用时,只显示最后一条消息!:( 但是,与默认警报框不同,它当然不会像默认的alert()函数一样在警报消失之前暂停网页 是否可以模仿这种“暂停网页”
alert()
函数,如下所示:
window.alert = function(str){
//custom alert
}
基本上,新函数将显示一个HTML
模式
背景故事:
我想回答这个问题,因为我有个问题。警报将隐藏,并在调用自定义警报函数时显示。因此,自定义警报基本上是显示元素并更改其文本因此,当我有多个alert()
调用时,只显示最后一条消息!:(
但是,与默认警报框不同,它当然不会像默认的alert()
函数一样在警报消失之前暂停网页
是否可以模仿这种“暂停网页”行为?
另外,除了使用setTimeout()
检查isCustomAlertOpen==true
延迟另一个自定义警报触发,直到当前警报被解除之外,还有其他方法吗?
编辑: 是否有办法将自定义警报排队? 我不介意jQuery,但我认为它在这里可能会被压倒 我的题目不好。有人能为我想出一个更好的题目吗 有可能模仿这种“暂停网页”的行为吗 答案是否定的。有一些方法可以阻止ui(同步ajax调用、长循环等)。但是当用户单击ok按钮时,您将无法停止这些操作 更好的方法是重新构造代码,使其不同步运行。也就是说,您不需要在等待用户时阻塞ui 另外,除了使用setTimeout()检查isCustomAlertOpen==true是否延迟另一个自定义警报触发,直到当前警报被解除,还有其他方法吗
一种方法是:不要在一个地方设置标志,然后在另一个地方重复检查。你可以使用事件的概念。代码的一部分等待触发事件,另一部分触发事件。jQuery中有一个库可以为你做这件事,或者你可以阅读它,然后自己编写。没有办法阻止执行,因为JavaScript是异步的(除了3个模态函数和XmlHttpRequest) 出于同样的原因,您不能等待上一个警报关闭,但您可以使用事件来使用此模式创建警报堆栈:
window.alert = (function() {
var stack = [];
var showNextAlert = function() {
var div = document.createElement("div");
/* Here, configure the div, show the string from stack[0] and add it to the document ... */
var okButton = /* ... */;
okButton.addEventListener("click", function() {
div.parentNode.removeChild(div);
stack = stack.slice(1);
if(stack.length > 0) {
showNextAlert();
}
});
}
return function(msg) {
stack.push(msg);
if(stack.length == 1) {
// Show it immediately if the stack is empty
showNextAlert();
}
};
})();
您还应该为该函数使用另一个名称,而不是更改本机属性(此处为
window.alert
)。alert()的“暂停”行为通常被认为是一件坏事。它可能会导致不稳定的行为,因为当警报出现在屏幕上时,事件仍然可以被触发,但在触发事件时,它们不会发生,而是排队等待警报被清除。当警报被清除时,它们将被运行,但可能不会按照您期望的顺序运行hem to be。如果你在定时事件方法中有一个警报,那就更糟糕了——在显示原始警报时,事件仍然会被触发,因此你可能会遇到不可阻挡的警报框。此外,如果你能够暂停网站,你(技术上)感觉如何计划再次恢复吗?@Siguza,直到警报对话框被取消。那么,事件大概会继续continue@Simba哦~我现在明白了。但是现在我想让警报框排队。有办法吗?有。但是不要这样做。setInterval(函数(){alert(“噢,救命啊,我被警报框包围了”);},100);
(提示:真的;你不想运行此代码)我从来没有想过JS中的“排队”。谢谢。我想我会尝试这个概念!我可能会在尝试后接受你的答案。:)问一个问题,return function
是否以msg
作为参数再次运行匿名警报函数?@DanielCheung否,返回的函数将在窗口中可见。警报
。这称为模块模式。此答案包含一些我以前没有见过的内容。让我研究一下首先,我会问你更多。:)我让它工作了。谢谢我以前从未使用过这种类型的代码。我学到了一些新东西:)我指的是(…)上的$(elem).和(…)
上的$(elem).触发器(…)
。但你仍然需要像塞巴斯蒂安·C·秀那样排队