Проблема с циклом JS

299
23 мая 2017, 03:14

Всем привет. Нужна ваша помощь. Есть задание - "Спросить у пользователя возраст. Если больше 18 заходите, если меньше - уходите. Но так же нужно предусмотреть что польозователь ничего не введет". Написал такой код

function userAge() { 
	var age = prompt('Привет. Сколько вам лет?'); 
 
	if (age >= 18) { 
		alert('Вы можете войти на сайт!'); 
	} else if (age < 18) { 
		alert('Вход на сайт только для людей старше 18!'); 
	}  
	else { 
		alert('Попробуйте еще раз!'); 
		age = prompt('Привет. Сколько вам лет?'); 
	} 
} 
 
userAge();

Но условие в else не возвращается.

Answer 1

проверяйте переменную age, если она пустая или не является числом запустите функцию еще раз (рекурсия).

function userAge() { 
  var age = prompt('Привет. Сколько вам лет?'); 
   
  if (age && !isNaN(age)) { 
    if (age >= 18) { 
      alert('Вы можете войти на сайт!'); 
    } else if (age < 18) { 
      alert('Вход на сайт только для людей старше 18!'); 
    } 
  } else { 
    alert('Попробуйте еще раз!'); 
    userAge(); 
  } 
} 
 
userAge();

Answer 2

Первое - вам нужно сразу конвертировать строку в int. В JS это можно сделать с помощью +;

Далее - используем do-while цикл и проверяем, верное ли значение введено как age > 0 (количество лет человека не может быть меньше нуля, младенец младше года вряд ли зайдет).

Также я предлагаю обернуть в цикл только момент ввода данных.

function userAge() { 
  let age; 
  do { 
    age = +prompt('Привет. Сколько вам лет?'); 
  } while (age <= 0); 
 
  if (age >= 18) { 
    alert('Вы можете войти на сайт!'); 
  } else if (age < 18) { 
    alert('Вход на сайт только для людей старше 18!'); 
  } 
} 
 
userAge();

Answer 3

А если так? )

function userAge() {
    var age = prompt('Привет. Сколько вам лет?');
    if (age >= 18 && age != "") {
        alert('Вы можете войти на сайт!');
    } else if (age < 18 && age != "") {
        alert('Вход на сайт только для людей старше 18!');
    } 
    else {
          alert('Попробуйте еще раз!');
          userAge();      
         }
}
userAge();
READ ALSO
Как закрыть все divы

Как закрыть все divы

Я новичекНикак не могу разобраться, как закрыть один div если нажимаем на другую кнопку

284
Как с помощью radio inputa сделать динамическое изменение цены опционального товара?

Как с помощью radio inputa сделать динамическое изменение цены опционального товара?

Здравствуйте! Делаю сайт, заказ Суши и роллы и там есть опциональные товары (например Роллы), прежде чем добавить в корзину клиенту нужно...

348
Flexbox, Как убрать часть текста?

Flexbox, Как убрать часть текста?

Eсть 2 блока первый текст 2-й картинка Как убрать часть текста с помощью flexbox при разрешении 768px

313
Помогите ускорить запрос к MySQL с большим offset limit

Помогите ускорить запрос к MySQL с большим offset limit

Подскажите, пожалуйста, как лучше составить запрос к mysql для вывода новостей на DLE, чтобы максимально ускорить? по дефолту представлен следующий...

394