3

我有一个像这样的表格:

<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

4 回答 4

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;
   }
于 2012-07-01T12:00:40.533 回答
1

1、防止提交事件:

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

2,如果一切正常,继续提交

   function checkField(){
      var fieldToCheck = $('#field').val();
      $.post("checkField.php",{field:fieldTocheck},function(msg)){
         $('#form').submit();
      }
   }
于 2012-07-01T12:03:42.677 回答
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);
  }
}

(最后一种形式更尴尬——你不能轻易地向第一种形式添加更多测试)。

于 2012-07-01T12:04:30.297 回答
0

最难想到的是,在处理请求之前,您必须在您的 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>
于 2012-07-01T12:03:53.113 回答