私のフォームでは、関数をフォーム送信にバインドしました。
$(document).ready(function() {
// Bind the submission to the form
$('form').bind('submit', onsubmit_action);
});
onsubmit_action() では、サブミット イベントのバインドを解除して、人々が再度クリックできないようにし、イベントで preventDefault を呼び出します。
function onsubmit_action(event) {
if (initiator == "form.buttons.finish") {
$('form').unbind('submit', onsubmit_action);
event.preventDefault();
sendRequest();
} else {
this.submit();
}
}
関数 sendRequest() は、ここで実際の AJAX 作業を行っています。sendRequest が失敗した場合は、フォームを再バインドするだけで問題ありません。しかし、成功した場合は、フォームを再バインドする必要がありますが、onsubmit_action() ではなく、フォームの元のアクションにバインドする必要があります。
<form action="/carry_on" method="post"></form>
sendRequest() メソッドとそのハンドラー:
handleResponse = function(data, code, jqXHR) {
switch (data.status) {
case "SUCCESS":
// This doesn't work because "submit" is unbound
$('#form-buttons-finish').click();
// Same with this
$('form').submit()
break;
case "ERROR":
alert('error')
break;
case undefined:
alert('undefined');
break;
default:
alert("Some kind of horrible error occurred: " + data.status);
break;
}
};
sendRequest = function() {
// Poll the the server for a response
$.ajax({
type: "POST",
cache: "false",
url: "/json/get_status",
dataType: "json",
data: { ref_token: token },
success: handleResponse,
error: handleError
});
};
私がやろうとしているのは、フォームの送信イベントを再バインドすることですが、それをフォームのデフォルト アクションにバインドします: /carry_on であり、onsubmit_action 関数ではありません。私は次のようなことをする必要があると考えています:
$('form').on('submit', function() {
post(this.action, this.serialize(), null, "script");
});
か何か。(上記の構文で推測しています)役立つアイデアは大歓迎です。
私の送信を妨害するものが他にありました。onsubmit_action のバインドを解除しただけなので、フォームは実際にはまだ既定のアクションにバインドされています。
お騒がせしてすみません。ただし、post() の使用に関する前回の提案に対するフィードバックをお待ちしています。また、デフォルトのアクションがバインドされていなかったらどうしますか?