我正在嘗試創建模式彈出式窗口(例如,對於是/否確認),以便在彈出窗口被回答之前代碼不會繼續執行。我知道推薦的方法是爲每個按鈕(菜單項)添加回調,但當菜單是循環的一部分時,此方法會出現問題,其中一個結果可能是循環中的「中斷」,而不是函數呼叫。 無論如何,我想出了代碼在這裏,使用一個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'仍然爲空(它將通過在打開之前附加到菜單上的按鈕上的回調來設置)。 一個附屬問題是,爲什麼我的'離開子句'有更長的超時時間?
您使用的是什麼彈出式庫/小部件? – hamstu
請注意,在javaScript中使用double等於運算符'!popupResult == false == null == undefined == 0 ==''== NaN'。簡單地使用not運算符,對於三重等於的特殊檢查,例如'null!== false'。 – metadings
我正在使用jquery mobile 1.3.1。關於==運算符的好處,但這只是一個簡單的例子 - 我會改變它,以便popupresult可以是0,1,2等,這取決於按下哪個按鈕 – quilkin