我有一个这样的形式:
<form name="form" id="form" action="sub.php" onsubmit="return checkField();">
.
.
.
</form>
在头脑中,我有:
<script>
function checkField(){
var fieldToCheck = $('#field').val();
$.post("checkField.php",{field:fieldTocheck},function(msg)){
return msg=='ok';
}
}
</script>
问题是表单将始终提交.. 我知道$.post
内部的回报是为了成功功能而不是功能checkField()
.. 那我该怎么办?有人可以帮助我吗?谢谢!!
1st,阻止提交事件:
$('#form').submit(function(event) {
event.preventDefault();
}
第二,如果一切正常,继续提交
function checkField(){
var fieldToCheck = $('#field').val();
$.post("checkField.php",{field:fieldTocheck},function(msg)){
$('#form').submit();
}
}
您在表单中指定了 onsubmit="return checkField();"
但是你的checkField()什么也不返回。
您必须返回 false 以表示中止且不发布,或者返回其他内容以表示继续发布。
试试这个:
function checkField(){
var fieldToCheck = $('#field').val();
var okToSubmit = false;
$.post("checkField.php",{field:fieldTocheck},function(msg)){
if (msg=='ok')
okToSubmit = true;
}
return okToSubmit();
}
此外,发布到 checkField 必须是同步的(async = False),否则 checkField() 函数将在检查字段是否正确之前返回其当前值 (false),从而为您提供漏报。
尚未测试:
function checkField(){
return $.post("checkField.php",{field:$('#field').val()},function(msg)){
return ('ok' == msg);
}
}
(最后一种形式更尴尬 - 你不能轻易地在第一种形式上添加更多测试)。
试试这个,
function checkField(){
var fieldToCheck = $('#field').val();
$.post("checkField.php",{field:fieldTocheck},function(msg)){
return msg=='ok';
// pure js submit() to stop checkField() to be called again
$('#form')[0].submit();
}
return false;
}
最困难的想法是,在处理请求之前,您必须在checkField函数中返回一些值,因此解决方案之一是返回false并仅在成功时发布表单详细信息
<script>
function checkField(){
var fieldToCheck = $('#field').val();
$.post("checkField.php",{field:fieldTocheck},function(msg){
if (msg=='ok')
{
var $form = $('#form'),
par = $form.serialize();
$.post($form.attr('action'), par, function(){});
}
}
return false;
});
</script>