jQuery表单提交

我的目标是:何时提交:

  • 对表单进行validation: 好的
  • 调用ajax以查看用户名和密码是否匹配: OK
  • 如果它们不匹配,则显示错误: 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(); }) 

您可以调用本机提交事件,所以这样做:

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

然后在你的post回调中这样做:

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

this.submit()不是调用jQuery .submit()触发器函数,而是调用本机

.submit()函数。

return false是阻止默认表单提交操作。 你要么form1Submit()函数return true ,要让默认表单提交动作完成它的工作, 要么else添加另一个$.post() ,如果你的意图是异步,则将数据异步提交给表单它使用ajaxical权力。

问题是form1Submit总是返回false。

 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(); })