Показать сообщение отдельно
  #6 (permalink)  
Старый 08.09.2019, 11:02
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Lefseq
Почему же не использую?
Потому, что в вашем коде серверу ваша форма нафиг не нужна, не отправляете ее вы. Следовательно вам нужны только два поля и две кнопки без формы. На эти кнопки нужно повесить обработчик события, в котором для кнопки запоминания и перенаправления нужно проверять ввод и если ОК, то перенаправить, а для кнопки удаления очищать локальное хранилище. Можете и два отдельных обработчика, это уже как душе угодно.

Для этого достаточно:

<section id="user-greeting">
        <label>
            Имя
            <input type="text" autocomplete="name" required>
        </label>
        <label>
            Фамилия
            <input type="text" autocomplete="family" required>
        </label>
        <button name="mem">Запомнить</button>
    <section>
        Привет, <span class="name"></span> <span class="family"></span>, добро пожаловать на сайт!
        <button name="del">Забудь обо мне!</button>
    </section>
</section>


и суть обработчика:

document.querySelectorAll("button").forEach((b) => {
    b.addEventListener("click", (b) => {
        if(b.target.name=='mem') {
            var err = false, mem = [];
            document.querySelectorAll("#user-greeting [required]").forEach(function(f) {
                if(!f.value.trim()) {
                    //поле не заполнено, вывод ошибки и запрет перенаправления err = true
                } else mem.push(f.value); //запомнить ввод
            });
            if(!err) { //поля заполнены
                localStorage.name = mem.join(' '); //запомнить ввод в хранилище
                location.href = URL; //перенаправление на URL
            }
        } else delete localStorage.name;  //удалить запомненное
    });
});


А вот проверка полей, тут можно издеваться до бессовестного.

Последний раз редактировалось laimas, 08.09.2019 в 11:09.
Ответить с цитированием