Как в jquery передать переменную js и потом вытащить ее значение обратно?

Здравствуйте!
Пишу форму регистрации нового пользователя. С JavaScript и JQuery знаком считанные часы.
Вылезла проблема, которую никак не могу решить:
в JS есть флаг VALID, который при успешном прохождении всех фильтров активирует кнопку "Зарегистрироваться".
В кусочке JQuery, где я сравниваю логин введенный с тем, что есть в базе, этот самый VALID я не могу вытащить.

// проверка логина на длину, латинские символы и цифры, первая буква
function validateForm() {

  var VALID = true;
  var login = document.getElementById("login").value.toLowerCase();;
  var errLogin = "";

  if(login.length < 4 || login.length > 20) {
    errLogin += "В логине должно быть от 4 до 20 символов<br>";
    VALID = false;
  }
  if(/^[a-zA-Z1-9]+$/.test(login) === false) {
    errLogin += "В логине должны быть только латинские буквы и цифры<br>";
    VALID = false;
  }
  if(parseInt(login.substr(0, 1))) {
    errLogin += "Логин должен начинаться с буквы<br>";
    VALID = false;
  }

// проверка совподения логина в базе
  if (login.length > 0) {
    if (errLogin.length < 1) {
      $.get("ajax.php?funk=users&login=" + login, function (data) {
            data = jQuery.parseJSON(data);
            var bdLogin = data[0].login;
              if (login.localeCompare(bdLogin) == 0) {
                VALID = false;
              errLogin = "Пользователь с таким логином уже зарегистрирован";
            }
            $('#errLogin').html(errLogin);
          });
        }
        document.getElementById('errLogin').innerHTML = errLogin;
      }

// проверка почты регулярным выражением
  var mail = document.getElementById("mail").value;
  var errMail = "";
  var re = /^([a-z0-9_\-]+\.)*[a-z0-9_\-]+@([a-z0-9][a-z0-9\-]*[a-z0-9]\.)+[a-z]{2,6}$/i;

  if(!re.test(mail)){
    errMail += "Не корректно введен e-mail";
    VALID = false;
  }
  if (mail.length > 0) {
document.getElementById('errMail').innerHTML = errMail;
}

// проверка имени
  var name = document.getElementById("name").value;
  var errName = "";
  re = /^[a-zA-Zа-яА-Я'][a-zA-Zа-яА-Я-' ]+[a-zA-Zа-яА-Я']?$/u;

  if(!re.test(name)){
    errName += "Не корректно введено Имя";
    VALID = false;
  }
  if (name.length > 0){
document.getElementById('errName').innerHTML = errName;
}

// проверка пароля

  var password = document.getElementById("password").value;
  var errPassword = "";

  re = /^[\d\w]{3,10}$/;

  if(!re.test(password)){
    errPassword = "Пароль должен быть от 3 до 10 символов и содержать только латинские символы и цифры";
    VALID = false;
    }
    if (password.length > 0) {
document.getElementById('errPassword').innerHTML = errPassword;
}

// сравниваем пароли
  var passwordR = document.getElementById("passwordR").value;
  var errPasswordR = "";

  if (password !== passwordR) {
    errPasswordR = "Пароли не совпадают";
    VALID = false;
  }
document.getElementById('errPasswordR').innerHTML = errPasswordR;

// потом удалить
document.getElementById('errorCounter').innerHTML = VALID;

if (VALID == true) {
  $('#submit').prop('disabled', false);
} else {
  $('#submit').prop('disabled', true);
}

}
  • Вопрос задан
  • 662 просмотра
Решения вопроса 1
@hitn89 Автор вопроса
В итоге получилось так:
// проверка совподения логина в базе
  if (login.length > 0) {
   if (errLogin.length < 1) {
   $.ajax({
     url: "ajax.php?funk=login&login=" + login,
     success: function (data) {
       data = jQuery.parseJSON(data);
       var bdLogin = data[0].login;
         if (login.localeCompare(bdLogin) == 0) {
         VALID = false;
         errLogin = "Пользователь с таким логином уже зарегистрирован";
       }
       $('#errLogin').html(errLogin);
     },
     async: false
   });
  }
  document.getElementById('errLogin').innerHTML = errLogin;
  }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
Ajax запрос выполняется асинхронно. Т.е. запрос отправляется, но ответа никто не ждет, начинается проверка почты регуляркой и т.д. В результате, к тому времени, как с сервера придет ответ ваш скрипт уже закончил работу, и этот VALID уже не используется.

Рекомендую почитать про асинхронные запросы, коллбеки и промисы.
Еще можно все это разобрать на куски, и привязать не на сабмит формы, а на change отдельных полей.

Т.е. юзер вводит мыло - и оно сразу проверяется, не дожидаясь заполнения других полей. Вводит два раза пароль - они сразу сравниваются. Круто же!
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы