在我的表单中,我已经绑定了一个函数来表示提交:
$(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()方法&amp;它的处理程序:
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()的最后一个建议的反馈。另外,你会做什么HAD默认动作是未绑定的?
答案 0 :(得分:0)
我认为.data('events')
列出了元素集上的所有绑定事件。也许你可以得到它,找到提交事件句柄,并将其缓存以供以后重新绑定?
在谷歌搜索时找到它:http://james.padolsey.com/javascript/things-you-may-not-know-about-jquery/
答案 1 :(得分:0)
此处的代码将链接和事件处理程序绑定到链接,没有unbind()但是只有一个简单的开关和jQuery data(),my_process()应该将'status'设置为'normal'。
$(document).ready(function(){
$('a').bind('click', function(e){
var status = $(this).data('status');
switch(status){
case 'processing':
e.preventDefault();
$(this).data('status', 'processing');
break;
case 'normal':
break;
default: /* First click */
e.preventDefault();
my_process($(this));
} /* end of switch */
});/* end of bind() */
});/* end of ready() */
示例:http://jsbin.com/etuqig/4/edit
使用data()函数,它会检测链接状态并采取相应的行动: