我的表格如下:
<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()
..所以我该怎么办?有人能帮我吗?谢谢!
答案 0 :(得分:1)
试试这个,
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;
}
答案 1 :(得分:1)
1,阻止提交事件:
$('#form').submit(function(event) {
event.preventDefault();
}
第二,如果一切正常,继续提交
function checkField(){
var fieldToCheck = $('#field').val();
$.post("checkField.php",{field:fieldTocheck},function(msg)){
$('#form').submit();
}
}
答案 2 :(得分:1)
您在表单中指定了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);
}
}
(最后一种形式更尴尬 - 你不能轻易地为第一种形式添加更多测试。)
答案 3 :(得分:0)
最难想的是,在处理请求之前,你必须在ur 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>