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


How to submit or not a form using jquery and 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().. 那我该怎么办?有人可以帮助我吗?谢谢!!

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>