Ссылка onclick="location.href" не поддерживает required. Чем заменить required?
Всем привет. Хотел реализовать переход с формы на другую страницу с помощью onclick="location.href", с обязательной проверкой полей формы на заполненность, но как оказалось required тут не работает. Подскажите, чем можно заменить required?
action с submin не вариант, с ними данные из формы не передаются и не происходит переход на страницу. <section id="user-greeting"> <form> <label> Имя <input type="text" autocomplete="name" name="name" required> </label> <label> Фамилия <input type="text" autocomplete="family-name" name="family-name" required> </label> <button onclick="location.href='https://site.ru/next.html'">Перейти</button> </form> <section> Привет, <span class="name"></span>, добро пожаловать на сайт! </section> </section> (function main() { var form = document.querySelector("#user-greeting > form"); var section = document.querySelector("#user-greeting > section"); function changeView() { if ("name" in localStorage) { form.style.display = "none"; section.style.display = ""; document.querySelector("#user-greeting .name").textContent = localStorage.name; } else { section.style.display = "none"; form.style.display = ""; } } form.addEventListener("submit", function(event) { event.preventDefault(); var data = new FormData(form); localStorage.name = [data.get("name"), data.get("family")].join(" "); changeView(); }); document.getElementById("user-greeting-forget-button").addEventListener("click", function() { delete localStorage.name; changeView(); }); changeView(); })(); |
Цитата:
|
Цитата:
(function main() { var form = document.querySelector("#user-greeting > form"); var section = document.querySelector("#user-greeting > section"); function changeView() { if ("name" in localStorage) { form.style.display = "none"; section.style.display = ""; document.querySelector("#user-greeting .name").textContent = localStorage.name; } else { section.style.display = "none"; form.style.display = ""; } } form.addEventListener("submit", function(event) { event.preventDefault(); var data = new FormData(form); localStorage.name = [data.get("name"), data.get("family")].join(" "); changeView(); }); document.getElementById("user-greeting-forget-button").addEventListener("click", function() { delete localStorage.name; changeView(); }); changeView(); })(); |
Цитата:
|
Цитата:
Рассказываю, посетитель пишет в форме свои Имя и Фамилию, эти данные запоминаются в localStorage, посетитель нажимает на кнопку "Перейти". Его перенаправляет на другую страницу где выводятся данные из localStorage. Все работает. Но проблема в том, что использую данный код, не работает required и пользователь может отправить пустые данные. Вот я и спрашиваю, чем проверять поля используя данный код? |
Цитата:
Для этого достаточно: <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, Не работает ваш код, совсем. Поля не проверяет, данные не запоминает.
|
Это ваш не работает, а это будет работать
<html> <body> <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> <script> document.querySelectorAll("button").forEach((b) => { b.addEventListener("click", (b) => { if(b.target.name=='set') { var err = false, mem = []; document.querySelectorAll("#user-greeting [required]").forEach(function(f) { if(!f.value.trim()) { err = true; alert('Не заполнено!'); } else mem.push(f.value); //запомнить ввод }); if(!err) { //поля заполнены alert('Запомнить '+mem.join(' ')) } } else delete localStorage.name; //удалить запомненное }); }) </script> </body> </html> Что-то в песочнице не работает, но запустите это отдельной страницей, и будут сообщения если поля будут пусты или содержать одни пробелы. А уж по каким правилам проверять, это уже не мне решать, тем более, что по логике все это похоже на бред. |
Цитата:
И еще, а куда в вашем коде ссылку на страницу для перенаправления вставить? |
Цитата:
|
Часовой пояс GMT +3, время: 09:31. |