Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вызов функций из функции, В сочетании с оператором IF 
:(
    Опции темы
doctor2k
Дата 10.11.2013, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 15.5.2010
Где: Russia, Samara

Репутация: нет
Всего: нет



Здравствуйте. У меня вопрос такой простой, ламерский, всю ночь ковыряю, не могу понять.
Есть две функции:

Код

function checkLogin()
{
  var login = $('#login').val();
  var loginLength = login.length;
  if (loginLength < 3)
  {
    $('#loginStatus').html('Логин слишком короткий!');
    return false;
  }
  else if (loginLength > 16)
  {
    $('#loginStatus').html('Логин слишком длинный!');
    return false;
  }
  else
  {
    $.post("/ajax.php", { "action": "checklogin", "login": login}, function(result)
    {
      if (result == 'free') 
      {  
        
        $('#loginStatus').html('Логин свободен');
        return true;
      }
      else 
      {
        $('#loginStatus').html('Логин занят!');
        return false;
      }
    });
  }
}


Это первая. Она проверяет длину логина и доступность для регистрации (занят/свободен).

Код

function checkPass()
{
  var password = $('#password').val();
  if (password.length < 8)
  {
    $('#passStatus').html('Пароль слишком короткий!');
    return false;
  }
  else
  {
    $('#passStatus').html('Пароль корректен');
    return true;
  }
}


Это вторая. Она проверяет банально длину пароля.

Далее мы делаем так:
Код

function checkAll()
{
if (checkLogin() && checkPass())
    {
      $('#regStatus').hide('Всё OK!');
    }
}


Всё вроде банально и просто, при вызове checkAll() она дёргает две другие функции и если они возвращают true то всё ОК. Но это не работает! Пробовал выносить функции в разные if например так:
Код

function checkAll()
{
    if (checkLogin())
    {
      if (checkPass())
      {
        $('#regStatus').hide('Всё OK!');
       }
     }
}


Или даже вот так:
Код

function checkAll()
{
    if (!checkLogin())
    {
      return false;
    }
    else 
      if (!checkPass())
    {
      return false;
    }
    else
    {
       $('#regStatus').hide('Всё OK!');
    }
}

Никакого результата. Это всё не работает. Если закомментить например checkLogin(), то проверка пароля проходит на ура, или если закомментить checkPass(), то проверка логина работает. Отдельно обе эти функции тоже работают нормально.
Подскажите пожалуйста, что я делаю не так, и как правильно? smile
Заранее спасибо.

P.S. На сайте используется jQuery и Bootstrap, если это важно. Хотя не думаю, что в них дело.

Это сообщение отредактировал(а) doctor2k - 10.11.2013, 08:56
PM MAIL ICQ Skype   Вверх
doctor2k
Дата 10.11.2013, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 15.5.2010
Где: Russia, Samara

Репутация: нет
Всего: нет



Активнее, товарищи, активнее, работа стоит...
PM MAIL ICQ Skype   Вверх
DEER
Дата 10.11.2013, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

Репутация: 2
Всего: 13



функция checkLogin, если проверка на длинну прошла, потом вернет не результат проверки свободен ли логин, а то, что возвращает $.post

true там возвращает collback после обработки post запроса, но никак не функция checkLogin

Вам надо логику переделать, чтобы, например пароль проверялся, если логин свободен, и если пароль ОК, то уже и говорить, что "Все ОК"

Это сообщение отредактировал(а) DEER - 10.11.2013, 13:41


--------------------
 
PM MAIL WWW ICQ MSN   Вверх
doctor2k
Дата 10.11.2013, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 15.5.2010
Где: Russia, Samara

Репутация: нет
Всего: нет



Однако сама по себе checkLogin работает... 

Не сразу понял, что Вы имели в виду, но сейчас разобрался. Если объявить var result = false; перед строкой $.post а внутри функции в $.post присвоить ей true в случае успеха а в самом конце checkLogin возвращать result... По идее, тогда запрос надо асинхронным делать, иначе вернёт false и не будет ждать результатов $.post...

В общем, сердечно благодарю smile буду копать дальше
PM MAIL ICQ Skype   Вверх
DEER
Дата 10.11.2013, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

Репутация: 2
Всего: 13



Сама по себе работает скорее всего, потому что $.post вернет объект, а он не есть false

но вот когда стоит условие if ( true && [Object] ) - тут js не понимает, что от него хотят - скорее всего ошибка какая то вылетала у вас


--------------------
 
PM MAIL WWW ICQ MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1400 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.