为什么我的函数返回undefined? [英] Why is my function returning undefined?

查看:178
本文介绍了为什么我的函数返回undefined?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

函数validate()返回undefined,当我期望它返回false或true时。这是为什么发生?现在我只是打字,因为stackoverflow不会让我发布这个问题,因为它主要是代码。

jsdata-hide =falsedata-console =truedata-babel =false>

 函数validate(){var isFormValid = false; var emailValid = false; var inputValid = false; var passValid = true; // VALIDATE EMAIL var emailInput = $(input [type ='email']); $ .get(/ checkEmail,{email:emailInput.val()},function(data){if(data.userExists){emailInput.removeClass(valid); emailInput.addClass(invalid); return false;} else {emailValid = true; emailInput.removeClass(invalid); emailInput.addClass(valid);} if(passValid&& emailValid&& inputValid){return true;}}); //添加有效类输入var inputs = $(input,textarea); inputs.each(function(){if($(this).val()!=){inputValid = true; $(this).removeClass(invalid); $(this).addClass(valid );} else {$(this).removeClass(valid); $(this).addClass(invalid); return false;} if(passValid&& emailValid& inputValid){return true ;}}); // VADIDATE PASSWORD var pass = $(input [name ='password']); var repass = $(input [name ='repassword']); if(pass.val()!= repass.val()){passValid = false; repass.removeClass( 有效); repass.addClass( 无效);返回false; ()函数(event){console.log(validate()); if(!validate()){event.preventDefault() ;}});});  

解决方案 validate 返回 $。get();返回 true false at .then()链接到 $。get() call;使用 .then() .fail() at .submit()调用来处理从 .then()返回的承诺值at validate

 函数validate(){
var isFormValid = false;

var emailValid = false;
var inputValid = false;
var passValid = true;

//验证电子邮件
var emailInput = $(input [type ='email']);
$ note`return`
return $ .get(/ checkEmail,{
email:emailInput.val()
})
.then(function (data){
//执行所有必要的逻辑,在`.then()`
中返回`true`或`false` if(data.userExists){
emailInput.removeClass( );
emailInput.addClass(invalid);
return false;
} else {
emailValid = true;
emailInput.removeClass(invalid );
emailInput.addClass(valid);
}

if(passValid&& emailValid&& inputValid){
return true;


//如果以下逻辑是必要的,在`.then()`

中执行逻辑//添加有效类输入
$ var input = $(input,textarea);
inputs.each(function(){
if($(this).val()!=){
inputValid = true;
$(this).removeClass(invalid);
$(this).addClass(valid);
} else {
$(this).removeClass(valid);
$(this).addClass(invalid);
返回false;
}
if(passValid&& emailValid&& inputValid){
return true;
}
});

// VADIDATE PASSWORD
var pass = $(input [name ='password']);
var repass = $(input [name ='repassword']);
if(pass.val()!= repass.val()){
passValid = false;
repass.removeClass(valid);
repass.addClass(invalid);
返回false;
}
* /
});


$ b $(document).ready(function(){
$(#registerForm)。submit(function(event){
event.preventDefault();
var elem = event.currentTarget;
validate()
.then(function(bool){
// if'bool` is true调用`.submit()`
if(bool){
elem.submit()
}
})
//处理错误
。 (函数(jqxhr,textStatus,errorThrown){
console.log(errorThrown)
})
});
});


The function validate() is returning undefined, when I expected it to return false or true. Why is this happening? Now I'm just typing this because stackoverflow won't let me post this question, since it is mostly code.

function validate() {
  var isFormValid = false;

  var emailValid = false;
  var inputValid = false;
  var passValid = true;

  //VALIDATE EMAIL
  var emailInput = $("input[type='email']");
  $.get("/checkEmail", {
    email: emailInput.val()
  }, function(data) {
    if (data.userExists) {
      emailInput.removeClass("valid");
      emailInput.addClass("invalid");
      return false;
    } else {
      emailValid = true;
      emailInput.removeClass("invalid");
      emailInput.addClass("valid");
    }

    if (passValid && emailValid && inputValid) {
      return true;
    }
  });

  //ADD VALID CLASS TO INPUTS
  var inputs = $("input,textarea");
  inputs.each(function() {
    if ($(this).val() != "") {
      inputValid = true;
      $(this).removeClass("invalid");
      $(this).addClass("valid");
    } else {
      $(this).removeClass("valid");
      $(this).addClass("invalid");
      return false;
    }
    if (passValid && emailValid && inputValid) {
      return true;
    }
  });

  //VADIDATE PASSWORD
  var pass = $("input[name='password']");
  var repass = $("input[name='repassword']");
  if (pass.val() != repass.val()) {
    passValid = false;
    repass.removeClass("valid");
    repass.addClass("invalid");
    return false;
  }

}

$(document).ready(function() {
  $("#registerForm").submit(function(event) {
    console.log(validate());
    if (!validate()) {
      event.preventDefault();
    }

  });
});

解决方案

Return $.get() from validate; return true or false at .then() chained to $.get() call; use .then(), .fail() at .submit() call to process promise value returned from .then() at validate

function validate() {
  var isFormValid = false;

  var emailValid = false;
  var inputValid = false;
  var passValid = true;

  //VALIDATE EMAIL
  var emailInput = $("input[type='email']");
  // note `return`
  return $.get("/checkEmail", {
    email: emailInput.val()
  })
  .then(function(data) {
    // perform all necessary logic, return `true` or `false` within `.then()`
    if (data.userExists) {
      emailInput.removeClass("valid");
      emailInput.addClass("invalid");
      return false;
    } else {
      emailValid = true;
      emailInput.removeClass("invalid");
      emailInput.addClass("valid");
    }

    if (passValid && emailValid && inputValid) {
      return true;
    }
    /*
      // if below logic is necessary, perform logic within `.then()`

      //ADD VALID CLASS TO INPUTS
      var inputs = $("input,textarea");
      inputs.each(function() {
        if ($(this).val() != "") {
          inputValid = true;
          $(this).removeClass("invalid");
          $(this).addClass("valid");
        } else {
            $(this).removeClass("valid");
            $(this).addClass("invalid");
            return false;
        }
        if (passValid && emailValid && inputValid) {
          return true;
        }
     });

     //VADIDATE PASSWORD
     var pass = $("input[name='password']");
     var repass = $("input[name='repassword']");
     if (pass.val() != repass.val()) {
       passValid = false;
       repass.removeClass("valid");
       repass.addClass("invalid");
       return false;
     }
    */
  });

}

$(document).ready(function() {
  $("#registerForm").submit(function(event) {
    event.preventDefault();
    var elem = event.currentTarget;
    validate()
    .then(function(bool) {
      // if `bool` is `true` call `.submit()`
      if (bool) {
        elem.submit()
      }
    })
    // handle error
    .fail(function(jqxhr, textStatus, errorThrown) {
       console.log(errorThrown)
    })
  });
});

这篇关于为什么我的函数返回undefined?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆