Javascript AJAX表单提交问题

Javascript AJAX表单提交问题,javascript,ajax,jquery,post,Javascript,Ajax,Jquery,Post,下面的代码是我注册页面的HTML标记和JS部分。我不知道出了什么问题,但是,当我没有填写所有文本输入并第一次单击提交按钮时,它会验证并给出错误消息。但当第二次单击时,它会直接将所有数据发布到php文件中。请看一下我的js文件(注意,不要注意验证错误消息:) HTML标记看起来是这样的 <form id="signup_form" action="core/code/PHP/registration/signup.php" method="post"> ... </form

下面的代码是我注册页面的HTML标记和JS部分。我不知道出了什么问题,但是,当我没有填写所有文本输入并第一次单击提交按钮时,它会验证并给出错误消息。但当第二次单击时,它会直接将所有数据发布到php文件中。请看一下我的js文件(注意,不要注意验证错误消息:)

HTML标记看起来是这样的

 <form id="signup_form" action="core/code/PHP/registration/signup.php" method="post">
  ...
</form>

...
和js部分

var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/,
   fname, mname, lname, email, pass, confirm_pass;




/*VALIDATION*/

/*check if input fields empty or not*/

function vPass1() {
   var isValid = true;

   if (!fname) {
      $("#fname").attr('class', 'invalid');
      isValid = false;
   }

   if (!lname) {
      $("#lname").attr('class', 'invalid');
      isValid = false;
   }

   if (!mname) {
      $("#mname").attr('class', 'invalid');
      isValid = false;
   }

   if (!email) {
      $("#email").attr('class', 'invalid');
      isValid = false;
   }

   if (!pass) {
      $("#pass").attr('class', 'invalid');
      isValid = false;
   }
   if (!confirm_pass) {
      $("#confirm_pass").attr('class', 'invalid');
      isValid = false;
   }

   return isValid;

}

/*Validation start*/
/*check names, email, password confirmation*/

function validatePassword(pw, options) {
   // default options (allows any password)
   var o = {
      lower: 2,
      upper: 0,
      alpha: 0,
      /* lower + upper */
      numeric: 1,
      special: 0,
      length: [0, Infinity],
      custom: [ /* regexes and/or functions */ ],
      badWords: [],
      badSequenceLength: 0,
      noQwertySequences: false,
      noSequential: false
   };

   for (var property in options)
   o[property] = options[property];

   var re = {
      lower: /[a-z]/g,
      upper: /[A-Z]/g,
      alpha: /[A-Z]/gi,
      numeric: /[0-9]/g,
      special: /[\W_]/g
   },
      rule, i;

   // enforce min/max length
   if (pw.length < o.length[0] || pw.length > o.length[1]) return false;

   // enforce lower/upper/alpha/numeric/special rules
   for (rule in re) {
      if ((pw.match(re[rule]) || []).length < o[rule]) return false;
   }

   // enforce word ban (case insensitive)
   for (i = 0; i < o.badWords.length; i++) {
      if (pw.toLowerCase().indexOf(o.badWords[i].toLowerCase()) > -1) return false;
   }

   // enforce the no sequential, identical characters rule
   if (o.noSequential && /([\S\s])\1/.test(pw)) return false;

   // enforce alphanumeric/qwerty sequence ban rules
   if (o.badSequenceLength) {
      var lower = "abcdefghijklmnopqrstuvwxyz",
         upper = lower.toUpperCase(),
         numbers = "0123456789",
         qwerty = "qwertyuiopasdfghjklzxcvbnm",
         start = o.badSequenceLength - 1,
         seq = "_" + pw.slice(0, start);
      for (i = start; i < pw.length; i++) {
         seq = seq.slice(1) + pw.charAt(i);
         if (
         lower.indexOf(seq) > -1 || upper.indexOf(seq) > -1 || numbers.indexOf(seq) > -1 || (o.noQwertySequences && qwerty.indexOf(seq) > -1)) {
            return false;
         }
      }
   }

   // enforce custom regex/function rules
   for (i = 0; i < o.custom.length; i++) {
      rule = o.custom[i];
      if (rule instanceof RegExp) {
         if (!rule.test(pw)) return false;
      } else if (rule instanceof Function) {
         if (!rule(pw)) return false;
      }
   }

   // great success!
   return true;
}




function vPass2() {


   if ($.isNumeric(fname)) {
      $("#fname").attr('class', 'invalid');
      $.notifyBar({
         cls: "error",
         html: "Ad ancaq hərflərdən ibarət olmalıdır"
      });
      return false;
   }

   if ($.isNumeric(lname)) {
      $("#lname").attr('class', 'invalid');
      $.notifyBar({
         cls: "error",
         html: "Familiya ancaq hərflərdən ibarət olmalıdır"
      });
      return false;
   }

   if ($.isNumeric(mname)) {
      $("#mname").attr('class', 'invalid');
      $.notifyBar({
         cls: "error",
         html: "Atanızın adı ancaq hərflərdən ibarət olmalıdır"
      });
      return false;
   }

   if (!emailReg.test(email)) {
      $.notifyBar({
         cls: "error",
         html: "Email ünvanınızı düzgün daxil edin"
      });
      $("#email").attr('class', 'invalid');
      return false;
   }


   if (pass != confirm_pass) {
      $.notifyBar({
         cls: "error",
         html: "Şifrə ilə təkrar şifrə üst-üstə düşmür"
      });
      $("#pass").attr('class', 'invalid');
      $("#confirm_pass").attr('class', 'invalid');
      return false;
   }

   if (!validatePassword(pass)) {
      $.notifyBar({
         cls: "error",
         html: "Şifrə minimum 2 hərif və 1 rəqəmdən ibarət olmalıdır."
      });
      $("#pass").attr('class', 'invalid');
      $("#confirm_pass").attr('class', 'invalid');
      return false;
   }

   return true;
}

function validate() {
   if (vPass1()) {
      if (vPass2()) {
         return true;
      }
   } else {
      $.notifyBar({
         cls: "error",
         html: "Qırmızı ilə qeyd olunan xanalara tələb olunan məlumatları daxil edin"
      });
      return false;
   }
} /*Validation End*/



$(document).ready(function () {
   $('#signup_form').get(0).reset()

   $("#signup_form").submit(function (e) {
      fname = $("#fname").val();
      mname = $("#mname").val();
      lname = $("#lname").val();
      email = $("#email").val();
      pass = $("#pass").val();
      confirm_pass = $("#confirm_pass").val();



      //check the form is not currently submitting
      if ($(this).data('formstatus') !== 'submitting') {
         var form = $(this),
            formData = form.serialize(),
            formUrl = form.attr('action'),
            formMethod = form.attr('method');

         //add status data to form
         form.data('formstatus', 'submitting');
         if (validate()) {
            //send data to server for validation
            $.ajax({
               url: formUrl,
               type: formMethod,
               data: formData,
               success: function (data) {

                  //setup variables
                  var responseData = jQuery.parseJSON(data),
                     cl, text;

                  //response conditional
                  switch (responseData.status) {
                  case 'error':
                     cl = 'error';
                     text = 'Qeydiyyat zamanı problem yarandı';
                     break;
                  case 'success':
                     cl = 'success';
                     text = 'Qeydiyyat uğurla başa çatdı';
                     break;
                  }


                  $.notifyBar({
                     cls: cl,
                     html: text
                  });
               }
            });

            //prevent form from submitting
            e.preventDefault();
         } else {
            return false
         }
      }
   });

});
var emailReg=/^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/,
fname、mname、lname、email、pass、confirm\u pass;
/*验证*/
/*检查输入字段是否为空*/
函数vPass1(){
var isValid=true;
如果(!fname){
$(“#fname”).attr('class','invalid');
isValid=false;
}
如果(!lname){
$(“#lname”).attr('class','invalid');
isValid=false;
}
如果(!mname){
$(“#mname”).attr('class','invalid');
isValid=false;
}
如果(!电子邮件){
$(“#email”).attr('class','invalid');
isValid=false;
}
如果(!通过){
$(“#通过”).attr('class','invalid');
isValid=false;
}
如果(!确认通过){
$(“#确认通过”).attr('class','invalid');
isValid=false;
}
返回有效;
}
/*验证开始*/
/*检查姓名、电子邮件、密码确认*/
功能验证密码(pw,选项){
//默认选项(允许任何密码)
变量o={
下限:2,
上限:0,,
阿尔法:0,
/*下+上*/
数字:1,
特别:0,,
长度:[0,无穷大],
自定义:[/*正则表达式和/或函数*/],
坏话:[],
badSequenceLength:0,
noQwertySequences:false,
结论:错误
};
for(选项中的var属性)
o[财产]=期权[财产];
变量re={
下:/[a-z]/g,
上部:/[A-Z]/g,
α:/[A-Z]/gi,
数字:/[0-9]/g,
特价:/[\W\uU7]/g
},
规则,我;
//强制最小/最大长度
if(pw.lengtho.length[1])返回false;
//强制执行下限/上限/字母/数字/特殊规则
for(规则在re中){
if((pw.match(re[rule])| |[]).length-1)返回false;
}
//强制执行无顺序、相同字符规则
if(o.noSequential&&/([\S\S])\1/.test(pw))返回false;
//强制执行字母数字/qwerty序列禁止规则
如果(o.S.长度){
var lower=“abcdefghijklmnopqrstuvxyz”,
upper=lower.toUpperCase(),
number=“0123456789”,
qwerty=“qwertyuiopasdfghjklzxcvbnm”,
开始=o.badSequenceLength-1,
seq=“389;”+pw.slice(0,开始);
对于(i=开始;i-1 | |上表索引of(seq)>-1 | |数字。下表索引of(seq)>-1 | |(o.noQwertySequences&qwerty.indexOf(seq)>-1)){
返回false;
}
}
}
//强制执行自定义正则表达式/函数规则
对于(i=0;i