如何使用jquery和javascript提交或不提交表单

时间:2012-07-01 11:47:42

标签: php jquery ajax forms post

我的表格如下:

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

4 个答案:

答案 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>