私はいくつかのフォーム検証関数を書いていますが、柔軟性があるため、ユーザーにプロンプトを表示するためにjQueryUIを使用することにしました。
少し問題があります。エラー報告システムのブール値と文字列で構成される配列を関数が返すようにしたい。JQueryUIダイアログは非同期です。つまり、ネイティブのprompt()のように、ブラウザーがハングして戻り値を待つことはありません。
サンプルコードは次のとおりです。
バリデーター機能:
function verifyTOS_PVM_v2()
{
verifyTOS_PVM_v2_callback = '';
if(!empty($('#inputPVM').val())) {
$('#inputPVM').val(date('d.m.Y', parseFinnishDate($('#inputPVM').val())));
val = $('#inputPVM').val()
date = parseFinnishDate($('#inputPVM').val());
today = today();
diff = Math.floor((date - today)/60/60/24);
if(diff <= -14)
{
buttons =
[
{
text:"Kyllä",
click:function()
{
$(this).dialog('destroy');
verifyTOS_PVM_v2_callback = "Kyllä"
}
},
{
text:"Ei",
click:function()
{
$(this).dialog('destroy');
verifyTOS_PVM_v2_callback = "Ei"
}
}
]
jQueryPrompt('Message', 'Koskien päivämäärää...', 400, buttons);
while(verifyTOS_PVM_v2_callback != "Kyllä" && verifyTOS_PVM_v2_callback != "Ei")
{
setTimeout('i = i + 1', 50)
}
res = verifyTOS_PVM_v2_callback;
if(res == "Kyllä")
{
error_occured = 2;
error = 'Message'
}
else
{
error_occured = 1;
error = 'Message'
}
}
} else {
error_occurred = 1;
error = "Message";
}
reterr[0] = error_occurred;
reterr[1] = error;
return reterr;
}
プロンプト機能:
function jQueryPrompt(msg, title, width, buttons)
{
$('body').append('<div id="jQueryPromptHost"></div>');
$('#jQueryPromptHost').append(msg);
$('#jQueryPromptHost').dialog({
title: title,
resizable: false,
width: width,
daraggable: false,
modal: true,
buttons: buttons
})
}
私は変数のポーリングを試みましたが、それは惨めに失敗しました(Firefoxがハングし、それ自体のためにより多くのメモリを消費しました...)
何か提案はありますか?
よろしく、
Akke
編集:
私はこの問題に対して別のアプローチを選びました。他の誰かが彼のアプローチを選んだ場合に備えて、私は最も近い解決策を答えとしてマークしました。皆さん、ありがとうございました!