나는 길을 잃어 버렸고 정확히 무엇을보아야할지 확실하지 않습니다. jQuery와 관련이 있다는 것을 알고 있습니다. 그래서, 요점은, 나는 이메일이 유효한지 여부를 확인하기 위해 부울로 "통과"변수를 반환하려고 노력하고있어. value = "asdf"로 false를 전달하는 대신 true를 계속 전달합니다. 나는 그것이 비동기 요청 때문에, 나는 그 변수를 연기하는 방법을 정확하게 모르겠다는 것을 안다. 코드는 다음과 같습니다.
console.log(this.newValidate($('#forgottenPwdForm'))); // Returns true
newValidate: function(form){
var $form = form,
errmsg = function(msg){
return '<span class="error" style="text-align:right; margin: 2px 15px; color:red;">' + msg + '</span><br/>';
};
// Check email/username
// Needs to run 2 validations. Is the email valid? And is it duplicate if valid
if($form.find('.email').length)
$form.find('.email').each(function(){
var email = escape($(this).val().trim()),
valid = true,
duplicate = false,
pass = true;
// Check if email is valid
$.when(
$.get('/service/account/ajaxdata?method=validemail&emailaddr='+email, function(res){
console.log(res);
valid = res;
}),
$.get('/subscribe/check_email?email=' + email, function(data) {
if(data){
duplicate = false; }
})
).then(function(){
if(valid == 0){
var error = errmsg("Email is not valid.");
pass = false;
console.log(pass);
}
else {
// Now that the email is valid, we need to check if it's duplicate
if(duplicate == false) {
$('.email').addClass('emailError');
pass = false;
}
else {
if($('.email').hasClass('emailError')) {
$('.email').removeClass('emailError');
$('.email').removeClass('error');
}
pass = true;
}
}
});
if(pass == false) return pass;
});
코드는 false를 반환해야 할 때 true를 반환합니다. 다시 말하지만 $ .get 요청과 변수가 범위를 벗어나는 것과 관련이 있다는 것을 알고 있습니다. 어떻게 지연 시킬지 잘 모르겠습니다.
그것은 좋은 찾고 있었던이 줄'경우까지 (통과 == false)를 return pass;는 약속을 벗어나므로 먼저 실행됩니다. 당신은 단순히 "if (isvalid() == true)'타입 테스트를 할 때'isvalid()'가 ajax 호출을 할 때 (그러나 당신은 이미 그것을 알고 있다고 생각합니다.) 자세한 정보는 여기를 참고하십시오 : http : // stackoverflow .com/questions/14220321/how-do-i-return-as-asynchronous-call/14220323 –
나는 그것을 이해하지만 newValidate 메소드는 전체 메소드가 실제로 더 많은 체크를하고있다. '.required'/ '.passwd'클래스를 검사하고 해당 통과 여부에 따라 false를 반환하며, false 반환은 양식이 게시되지 않도록합니다 (표시되지 않음). 현재 해당 링크를 확인하고 있습니다. – jamadri