在我的表单中,我绑定了一个函数来提交表单:
$(document).ready(function() {
// Bind the submission to the form
$('form').bind('submit', onsubmit_action);
});
在 onsubmit_action() 我取消绑定提交事件,这样人们就不能再次点击,并在事件上调用 preventDefault 因为我在做一些 AJAX 废话:
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() 的最后一个建议的反馈。另外,如果默认操作未绑定,您会怎么做?