我的网站上有两个表单#footer_leads和#footer_leads2我有一个实时提交事件,但需要在表单汇总之前验证一些内容,所以我有这个代码
$('#footer_leads2, #footer_leads').live('submit', function(e){
e.preventDefault();
console.log('again');
var form = $(this); //save reference to form
if(somevalidation){
form.die();
form.submit(); //submit form
}
我认为jQuery die事件会像上面的例子那样做,但页面只是进入一个无限循环并崩溃我的浏览器....任何关于如何做到这一点的想法
答案 0 :(得分:6)
来自jQuery die()
页面:
注意:为了使.die()正常运行,使用了选择器 与它必须完全匹配最初与.live()。
一起使用的选择器
请尝试$('#footer_leads2, #footer_leads').die()
。
答案 1 :(得分:2)
您不需要删除处理程序并重新提交。只需等待preventDefault()
,直到您知道表单是否通过验证:
$('#footer_leads2, #footer_leads').live('submit', function(e) {
if (!somevalidation)
e.preventDefault();
// Else, the form will continue submitting unimpeded.
});
答案 2 :(得分:1)
您是否要在提交后停用表单?
如果是,试试这个: $('input [type = submit]',this).attr('disabled','disabled');
我希望得到它的帮助,
答案 3 :(得分:1)
来自文档(http://api.jquery.com/die/):
注意:为了使.die()正常运行,使用了选择器 与它必须完全匹配最初与.live()。
一起使用的选择器
您需要使用.unbind('submit')
答案 4 :(得分:1)
不要unbind/die
。
只需使用原生方法提交表单。
$('#footer_leads2, #footer_leads').live('submit', function() {
if (true /* validation succeeded */ ) {
this.submit(); //submit form, but don't use jQuery's method
} else {
return false;
}
});
更新:
由于听起来您正在进行验证的AJAX调用,因此您可以在this.submit()
回调中执行success:
。
$('#footer_leads2, #footer_leads').live('submit', function() {
$.ajax({
url: 'some/path',
context: this, // set the context of the callbacks to the element
...
success: function( d ) {
if( d.is_valid ) {
this.submit();
} else {
// give some feedback to the user for validation failure
}
}
});
return false; // block the submit by default
});