我正在尝试做一些非常简单的事情:单击链接,弹出模式以继续或取消链接的 URL,继续 URL 或取消(本质上隐藏模式)。我的问题是弹出模式时的“等待”期,提示用户继续或取消。现在,我的代码似乎从未运行过第一个 waitForModalEvent()
调用:
<a href="someURL" onclick='return handleClick()'> Click Here </a>
function handleClick() {
if (dataChanged()) {
returnValue = false;
displayModal();
returnValue = waitForModalEvent();
//never called at or past this point. Tested with alert()
return returnValue;
} else {
return true;
}
}
var continueClicked = false;
var cancelClicked = false;
function waitForModalEvent() {
while(!continueClicked && !cancelClicked) {
waitForModalEvent(); //I know this gives the browser some troubles
}
if (continueClicked) {
return true;
} else {
return false;
}
}
我知道这段代码是错误的(尤其是可怕的 waitForModalEvent()
永远不会结束的递归调用)。但是,我一直不知道如何解决这个问题,并在 handleClick()
中返回 true 或 false用户单击“继续”或“取消”后。 我的设置是否使用 <a href>
的onclick
对于我想要实现的目标来说,这本质上是一个糟糕的设置?
我已经阅读了回调,但无法掌握如何在我的情况下使用回调(如果有的话)。将不胜感激任何形式的建议或见解!
最佳答案
您已经生成了一个无限循环,它锁定了 JavaScript 事件循环。在 while
循环完成之前,您在其中测试的变量永远不会改变。
如果你想基于 DOM 对话做一些事情,你必须使用回调来完成。在等待用户交互时,没有办法(在主机环境之外提供像 confirm
这样的函数)进行阻塞。
此处使用回调的一般方法是始终取消单击链接的默认操作,然后让回调复制其功能(或者只是在对话框中放置常规链接)。
关于javascript - 单击链接后选择继续或不继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32873792/