一種の「ソフト」検証に jQuery UI ダイアログを使用しようとしています。フォームが疑わしい場合は、ユーザーに警告しますが、とにかく送信を続行できるようにします。
// multiple submit buttons...
var whichButton;
$("#myForm").find("[type=submit]").click(function()
{
whichButton = this;
}
var userOkWithIt = false;
$("#myForm").submit(function()
{
if (dataLooksFishy() && !userOkWithIt)
{
$("Are you sure you want to do this?").dialog(
{
buttons:
{
"Yes": function()
{
$(this).dialog("close");
// override check and resubmit form
userOkWithIt = true;
// save submit action on form
$("#myForm").append("<input type='hidden' name='" +
$(whichSubmit).attr("name") + "' value='" +
$(whichSubmit).val() + "'>");
$("#myForm").submit(); /****** Problem *********/
},
"No": function() { $(this).dialog("close"); }
}
});
return false; // always prevent form submission here
} // end data looks fishy
return true; // allow form submission
});
一連のデバッグ アラート ステートメントを使用して、これを確認しました。制御フローはまさに私が期待するものです。最初に dataLooksFishy() に失敗すると、ダイアログが表示され、メソッドは非同期で false を返します。
「はい」をクリックすると、このメソッドが再トリガーされ、今回はメソッドが true を返しますが、フォームは実際には送信されません...
ここではより良い方法論が欠けていると確信していますが、主な目標は、非同期の dialog() で同期の confirm() の動作をシミュレートできるようにすることです。