Цель следующего сценария - подсчитать количество попыток, на которые пользователь ответил неверно (в качестве значения был введен неверный пароль). После того, как переменная «try» изменилась с 0 на 2, переменная error становится 1, и пользователь перемещается с веб-страницы формы.

Я пытался использовать условные выражения для создания потока этого процесса, но, похоже, они терпят неудачу в том смысле, что неправильный пароль не выведет пользователя с сайта, а правильный пароль не будет распознан.

Кажется, у меня есть логическая ошибка: мне пока не хватает знаний, и это кажется кислым.

Как начинающий я спрашиваю, что не так в условной системе?

<!DOCTYPE HTML>
<html>
	<head>
	</head>
	<body>
		<form>
		Enter password to continue: <br>
		<input type="text" id="user"/>
		<input type="button" id="myButton" value="Enter site"/>
		</form>

		<script>
			document.querySelector("#myButton").onclick = function() {
				let tries = 0;
				let error = 0;
				let password = 'tiesto';
				let passwordValue = document.querySelector("#user").value;

				if (passwordValue === password) {
					document.location = 'http://www.maariv.co.il';
				} else {
					tries++;
					alert('Try again please.');
				}

				if (tries === 2) {
					error++;
				}

				if (error === 1) {
					document.location = 'http://www.microsoft.com';
				}
			};
		</script>
	</body>
</html>
0
sangoko 29 Авг 2017 в 04:08

3 ответа

Лучший ответ

Благодаря Диджу и Эвелин Ма, теперь я понимаю свою ошибку.

Я не осознавал, что вызов функции для события (например, onload) требует удаления всех переменных , равных 0, или строки , чтобы они не изменялись при выполнении функции:

Каждый раз, когда событие инициируется и функция выполняется, значения сбрасываются, если они объявлены внутри функции, поэтому уровень, установленный в условии, никогда не будет достигнут.

Например: когда переменная пытается установить значение 0 вне функции, пользователь может пытаться выполнить до, скажем, 3 попытки, и при каждом выполнении переменная не будет сбрасываться, но если она находится внутри функции, она будет возвращаться с 1 на 0 каждый пытаться.

У меня также было 2 других не связанных ошибки в коде:

  1. Помимо перемещения всех переменных, установленных на 0, или строки снаружи, мне пришлось включить querySelector внутри, чтобы каждый раз заново проверять его значение.

  2. Я не использовал возврат, и определенным правильным способом.

Примечание: пароли должны быть не в коде, а вызываться из базы данных, но это всего лишь упражнение.

Вот полный код рабочего упражнения:

<!DOCTYPE html>
<html>
    <body>
        <form id="myForm">
        Enter password to continue: <br>
            <input type="text" id="passwordInput"/>
            <input type="button" id="myButton" value="Enter site"/>
        </form>
        <script>
            let tries = 0;
            let error = 0;
            let password = 'tiesto';

            document.querySelector("#myButton").onclick = ()=> {

                let passwordInput = document.querySelector('#passwordInput').value;

                if (password === passwordInput) {
                    return window.location.href = 'http://maariv.co.il';
                    } else {
                        tries++;
                        alert('Try again please.');
                    }

                    if (tries === 3) { // 3 is the border.
                        error++;
                    }

                    if (error === 1) {
                        window.location.href = 'http://microsoft.com';
                    }
                };
        </script>
    </body>
</html>
0
sangoko 29 Авг 2017 в 15:17

В функции вы инициализируете tries в 0, поэтому она становится равной 0 при каждом вызове функции, а после увеличения становится 1 и никогда не достигает 2, вы можете объявить tries вне функции, что-то вроде этого :

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<html>
<head>
</head>
<body>
    <form>
    Enter password to continue: <br>
    <input type="text" id="user"/>
    <input type="button" id="myButton" value="Enter site"/>
    </form>

    <script>
        let tries = 0;
        document.querySelector("#myButton").onclick = function() {

            let error = 0;
            let password = 'tiesto';
            let passwordValue = document.querySelector("#user").value;

            if (passwordValue === password) {
                document.location = 'http://www.maariv.co.il';
            } else {
                tries++;
                alert('Try again please.');
            }

            if (tries === 2) {
                error++;
            }

            if (error === 1) {
                document.location = 'http://www.microsoft.com';
            }
        };
    </script>
</body>
</html>
1
Dij 29 Авг 2017 в 01:13

Вы помещаете let tries = 0; в функцию onclick, так что она будет установлена в 0 каждый раз, никогда не достигнет 2, поэтому просто удалите ее из функции.

      let tries = 0;
        document.querySelector("#myButton").onclick = function() {
            let error = 0;
            let password = 'tiesto';
1
Evelyn Ma 29 Авг 2017 в 01:18