Не работает переход в "error.html" при условии, что в полях ввода( inp1,inp2) пусто

 let inp1 = document.getElementById("inp1");
 let inp2 = document.getElementById("inp2");
 let btn1 = document.getElementById("btn1");
 let btn2 = document.getElementById("btn2")
 let h1 = document.querySelector(".h1");

 if (btn1 !== null) {
     btn1.addEventListener("click", function() {
         localStorage.setItem("name", inp1.value);
         localStorage.setItem("surname", inp2.value);
         location.href = "profile.html";
     })
 }

 if (btn2 !== null) {
     btn2.addEventListener("click", function() {
         localStorage.clear();
         location.href = "index.html";
     })
 }
 if (inp1 !== ' ') {
     btn1.addEventListener("click", function() {
         localStorage.getItem("name", inp1.value);
         localStorage.getItem("surname", inp2.value);
         location.assign("error.html");
     })
}

Ответы (1 шт):

Автор решения: yar85

Условие «в полях ввода inp1 и inp2 пусто», дословно можно записать так:

(inp1.value === '') && (inp2.value === '')

Условие inp1 !== ' ' из кода в вопросе, проверяет совсем другое: строгое неравенство элемента(!) строке состоящей из одного пробела. Конечно же, это условие выполняется всегда, и второй обработчик клика будет добавлен кнопке btn1 в любом случае.

Переход на error.html не работает по той причине, что сначала выполняется первый обработчик клика кнопки btn1 (в котором выполняется переход на profile.html): при переходе на другую страницу, выполнение скриптов на текущей странице сразу же прерывается... поэтому, второй обработчик той же кнопки (тот что с переходом на error.html, он добавлен вторым) никогда не выполнится.


Выражения с вызовами localStorage.getItem - по факту, ничего полезного не делают (читается значение, затем результат возвращается "в никуда"). Если планировалось считывать значения и заполнять ими поля ввода, то это можно сделать (например) так:

inp1.value = localStorage.getItem('name') || inp1.value;
inp2.value = localStorage.getItem('surname') || inp2.value;

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

→ Ссылка