2010-09-03 182 views
12

我的目标是: 当提交:jQuery的形式提交

  • 的形式验证是由:OK
  • 一个Ajax调用看到用户名和密码一致的情况:OK
  • 如果它们不匹配,显示错误:OK
  • 如果匹配的话真是提交表单:NO T OK

事实上麻烦的是,我无法提交表单,因为它上面有一个jquery提交事件!

function form1Submit() { 
var username=$('#username').val(); 
var password=$('#password').val(); 
if (username.length<2) { 
    return false; 
} 
if (password.length<2) { 
    return false; 
} 
$.post("check.php", { username: username, password:password }, function(data) { 
    if (data=="ko") { 
     alert('bad password'); 
     return false; 
    } else { 
    //to be done here ! 
    } 
}); 
    return false; 
} 
function init() { 
    $('#form1').submit(function(){ 
     return form1Submit(); 
    }) 
} 
$(document).ready(function(){ 
    init(); 
}) 

回答

9

您可以调用本地提交的事件,所以这样做:在您的帖子回调

$('#form1').submit(form1Submit); 

那么做到这一点:

$.post("check.php", { username: username, password:password }, function(data) { 
    if (data=="ko") { 
     alert('bad password'); 
    } else { 
     this.submit(); 
    } 
}); 

this.submit()并没有叫他的jQuery .submit()触发功能,而是本地<form>.submit()函数。

1

return false正在阻止默认窗体提交操作。你有要么return trueform1Submit()功能,让默认的形式提交行动完成其工作,添加另一$.post()将数据提交到表单异步,如果你的意图是它使用ajaxical做else内权力。

1

问题是form1Submit总是返回false。

1
function form1Submit(ev, ok) { 

    ev.stopPropagation(); 

    ok = (typeof ok != 'undefined') ? ok : false; 

    if (ok) 
    return true; 

    var username=$('#username').val(), 
     password=$('#password').val(), 
     selfForm = this; 

    if (username.length < 2) 
    return false; 

    if (password.length < 2) 
    return false; 

    $.post("check.php", { username: username, password:password }, function(data) { 
    if (data=="ko") { 
     alert('bad password'); 
    } else { 
     $(selfForm).trigger('submit', [true]); // again submit but with ok parameter 
    } 
    }); 

    return false; 
} 

function init() { 
    $('#form1').bind('submit', form1Submit); 
} 

$(document).ready(function(){ 
    init(); 
}) 
+0

'$(selfForm).trigger('submit',[true]);'似乎有诀窍。只需用表单的ID替换自定义表单,您就可以全部设置。例如:'$('#frm_test')。trigger('submit',[true]); ' – Devner 2013-04-09 12:33:54