表单提交前{j}验证

时间:2015-04-30 13:28:31

标签: javascript jquery ajax

嘿我正在尝试使用Ajax验证表单。

验证正确时, 我希望表格提交。

否则我想显示反馈等。

但有时我会得到一个无限循环或表格不提交。

如何解决此问题?

//Find Sign form
var sign_form = $("#sign_form");

//User submits Sign form
sign_form.submit(function(e) {
    e.preventDefault();

    var $this = $(this);

    var form = $(this).serializeArray();
    var formObj = {};
    $.each(form,
        function(i, v) {
            formObj[v.name] = v.value;
        });

    //Post Form data to Sign
    $.post("./ajax/sign.php", formObj, function(data, status) {
        var fdb = data.messages;
        if(data.status == "success") {

            console.log("validate is TRUE");
            $this.submit();

            return true;
        } else {

            if(fdb.emailaddress != null) {
                $("#fdb_emailaddress").html(fdb["emailaddress"]);
            }

            console.log("validate is FALSE");
            return false;
        }
    });

    console.log("validate ended: we should not see this");
});

1 个答案:

答案 0 :(得分:0)

当然提交会进入无限循环 - 因为你触发了函数内的提交()绑定提交()...... ;-) 您必须保存信息"已经进行了验证"不知何故,例如通过数据属性或数据(),然后对此作出反应。 e.g:

//Find Sign form
var sign_form = $("#sign_form");

//User submits Sign form
sign_form.submit(function(e) {

  var $this = $(this);
  if($this.data("validated") === true) return true;

  e.preventDefault();

  var form = $(this).serializeArray();
  var formObj = {};
  $.each(form,
    function(i, v) {
        formObj[v.name] = v.value;
    });

  //Post Form data to Sign
  $.post("./ajax/sign.php", formObj, function(data, status) {
    var fdb = data.messages;
    if(data.status == "success") {

        console.log("validate is TRUE");
        $this.data("validated", true);
        $this.submit();

        return true;
    } else {

        if(fdb.emailaddress != null) {
            $("#fdb_emailaddress").html(fdb["emailaddress"]);
        }

        console.log("validate is FALSE");
        return false;
    }
  });

  console.log("validate ended: we should not see this");
});