ポップアップが応答されるまでコードが実行されないように、モーダル ポップアップを作成しようとしています (たとえば、はい/いいえの確認用)。推奨される方法は、各ボタン (メニュー項目) にコールバックを追加することですが、この方法では、メニューがループの一部であり、結果の 1 つが関数ではなくループからの「中断」である場合に問題が発生します。電話。とにかく、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」は null のままです (メニューが開かれる前にメニューに追加されるボタンのコールバックによって設定されます)。副次的な質問は、タイムアウトが長い私の「get-out句」が起動しないのはなぜですか?