2016-11-10 15 views
0

関数validate()は、falseまたはtrueを返すと予想されたとき、未定義を返しています。なぜこうなった?今私はstackoverflowはほとんどのコードですので、私はこの質問を投稿させませんので、これを入力しています。なぜ私の関数は未定義に戻りますか?

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

.then()から返され、何も明示的に返されundefined' 'ので返されません。また、非同期呼び出しから戻ることはできません。 – Tushar

+0

どうすればそれを解決できますか? – leodaher

+0

https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call?rq=1 – Tushar

答えて

0

validateからの復帰$.get()trueまたはfalse.then()に返すと、$.get()コールに戻ります。何の条件が一致していない場合は約束値を処理するために.submit()コールで.then().fail()を使用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) 
    }) 
    }); 
}); 
関連する問題