我正在尝试创建一个模式弹出窗口(例如,用于确认是/否),这样代码在弹出窗口得到回答之前不会继续执行。我知道推荐的方法是为每个按钮(菜单项)添加回调,但是当菜单是循环的一部分并且结果之一可能是循环的“中断”而不是函数时,此方法会出现问题称呼。无论如何,我在这里使用 jquery 1.3 弹出小部件提出了代码:
var $popUp;
var popupResult;
function wait()
{
if (popupResult == null) {
setTimeout(wait, 100);
}
else
return;
}
function CreatePopupMenu(title)
{
popupResult = null;
// for safety, timeout the popup if it isn't answered
setTimeout(function(){ popupResult = false; }, 3000);
$popUp = $("<div/>").popup({
dismissible: false,
theme: "c",
afteropen: function () {
while (popupResult == null)
wait();
}
}).on("popupafterclose", function ()
{
$(this).remove();
});
$("<h4/>", { text: title }).appendTo($popUp);
}
问题是,弹出窗口实际上并没有出现,代码直接运行到“afteropen”回调中。如果弹出窗口没有出现,则用户不能使用按钮设置“popupResult”,因此等待将永远继续。如果我删除“afteropen”回调,弹出窗口会按预期显示,但现在“popupResult”仍然为空(它将由在打开之前附加到菜单的按钮上的回调设置)。一个附属问题是,为什么我的超时时间较长的“退出条款”不会触发?