ユーザーが送信しようとしたときに値の 1 つを確認するフォームがあり、jQuery UI モーダル ダイアログで確認を行いたいと考えています。
コードは次のようになります。
valuesCheck = function(event) {
$j("#proposal-form-errors")
.dialog({
modal: true,
width: 600,
title: 'Values Confirmation',
buttons: {
"Confirm values and submit proposal": function () {
$form = $j('form#proposal');
$form.addClass('values-confirmed');
$j(this).dialog("destroy");
$form.submit();
},
"Continue editing": function () {
$j(this).dialog("destroy");
}
}
})
.html('<p>Please confirm the selected values.</p>');
event.preventDefault();
}
$j("form#proposal").submit(function(event) {
var val1 = $j("#val1 option:selected").text();
var val2 = $j("#val2").val();
if (val1 && val2 && !$j(this).hasClass('values-confirmed')) {
valuesCheck(event);
} else {
return true; // processing stops here after the first click.
}
});
Firebug にブレークポイントを設定すると、「値を確認して提案を送信する」をクリックした後、送信関数で「true を返す」行を渡しても何も起こらないことを除いて、すべてが期待どおりに機能することがわかります。送信イベントをもう一度発生させると、フォームは実際に送信されます。
問題は「event.preventDefault()」に関連していると思いますが、それがないと、モーダル ダイアログが消え、確認が行われる前にフォームが送信されます。
また、ハンドラー$form.submit()
内からメソッドを再度呼び出してみましたが、役に立ちませんでした。valuesCheck
モーダルダイアログの「値を確認して提案を送信する」ボタンをクリックすると、実際にフォームが送信されるようにするにはどうすればよいですか?