2012-07-01 37 views
3

不是一个形式,我有一个类似的形式提交或:如何使用jQuery和JavaScript

<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() ..所以我能做什么?有人能帮我吗?谢谢!!

+1

首先你需要'返回false'来阻止表单提交。然后,在Ajax成功后,您可以通过javascript提交表单。请参阅下面的答案。 – Jashwant

回答

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; 
    } 
+0

我认为$('#form')。submit();会发出另一个电话给checkField – Ziumin

+0

感谢@Ziumin,更正了我的代码 – Jashwant

1

1,防止提交事件:

$('#form').submit(function(event) { 
event.preventDefault(); 
} 

2,如果一切OK,继续提交

function checkField(){ 
     var fieldToCheck = $('#field').val(); 
     $.post("checkField.php",{field:fieldTocheck},function(msg)){ 
     $('#form').submit(); 
     } 
    } 
0

最难认为,美在处理请求之前必须返回一些值在checkField函数中,所以其中一个解决方案是返回false和po只有

<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> 
1

您的表单中指定的成功ST乌尔形式的详情,的onsubmit = “返回校验场();”

但是你的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(); 
} 

此外,帖子校验场必须是同步的(异步= FALSE),否则校验场()函数之前检查该字段为正确返回其电流值(false) ,从而给你错误的否定。

没有测试:

function checkField(){ 
    return $.post("checkField.php",{field:$('#field').val()},function(msg)){ 
    return ('ok' == msg); 
    } 
} 

(最后的形式是比较尴尬的 - 你不能很容易地添加更多的测试,第一个)。