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