Why is my function returning undefined?

旧城冷巷雨未停 提交于 2019-12-25 14:08:47

问题


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();
    }

  });
});

回答1:


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)
    })
  });
});


来源:https://stackoverflow.com/questions/40519579/why-is-my-function-returning-undefined

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!