Ссылка onclick="location.href" не поддерживает required. Чем заменить required?

D
На сайте с 01.09.2015
Offline
56
322

Всем привет. Хотел реализовать переход с формы на другую страницу с помощью 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();
});


changeView();
})();
IL
На сайте с 20.04.2007
Offline
412
#1
Digistive:
<button onclick="location.href='https://site.ru/next.html'">Перейти</button>

Так поля формы не передадутся.

0) в form action прописать.

1) сделать обычную "человеческую" форму или использовать

2) $.post()

D
На сайте с 01.09.2015
Offline
56
#2
ivan-lev:
1) сделать обычную "человеческую" форму или использовать

Да, но в таком случае не передаются данные из формы.


(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();
});


changeView();
})();

IL
На сайте с 20.04.2007
Offline
412
#3
Digistive:
Да, но в таком случае не передаются данные из формы.

Здрасьте, приехали.. 😂

Изначально "человеческие формы" предназначены для передачи между страницами данных формы.. без всяких js, vbs.. и уж тем более jQuery, ajax-ов и прочего излишнего непотребства..

D
На сайте с 01.09.2015
Offline
56
#4
ivan-lev:
Здрасьте, приехали.. 😂
Изначально "человеческие формы" предназначены для передачи между страницами данных формы.. без всяких js, vbs.. и уж тем более jQuery, ajax-ов и прочего излишнего непотребства..

Да, а сейчас не 2000 год, и иногда нужно передавать с помощью формы как вы выразились разные непотребства.

flacon2000
На сайте с 08.08.2013
Offline
86
#5
Digistive:
Да, а сейчас не 2000 год, и иногда нужно передавать с помощью формы как вы выразились разные непотребства.

Вам же посоветовали выше - используйте jquery если хотите извращений. location.href это не про формы.

⭐ Бесплатно проконсультирую по Figma
S
На сайте с 13.10.2014
Offline
147
#6

ну придется городить велосипед. Иначе никак.

ivan-lev, Такую конструкцию часто используют, для защиты от авторегистраций, да вообще от автозаполнения машинами. Система обходится на раз, но против 99.9% ботов работает на ура.

IL
На сайте с 20.04.2007
Offline
412
#7
silicoid:
ivan-lev, Такую конструкцию часто используют, для защиты от авторегистраций, да вообще от автозаполнения машинами. Система обходится на раз, но против 99.9% ботов работает на ура.

Против 99% (как считали?) ботов работает скрытое от пользователя поле со стандартным именем (email, login, name), которое боты заполняют.. и/или добавленное заполненное JS-ом при выводе или submit-е формы.. При этом реальное поле просто с другим именем. Если у спамеров нет цели "на конкретный сайт", то такого вполне хватает.

Digistive:
Да, а сейчас не 2000 год, и иногда нужно передавать с помощью формы как вы выразились разные непотребства.

Ничего с тех пор не изменилось - передаются данные.. Формально, можно даже обойтись без форм.

silicoid:
ну придется городить велосипед. Иначе никак.

Все велосипеды уже давно нагорожены.. Но можно и свой нагородить...

Однако, осмелюсь предположить, что пост совсем не про это..

Digistive, Вы определитесь, что хотите-то.. В коде у вас про localStorage, который в куки запоминает.. 😂 А потом что-то про передачу данных, которая на самом деле этим же кодом и перехватывается..

А вместо required, если есть понимание, что там происходит, можно просто добавить проверку на заполненность где-то по соседству с вызовом changeView


localStorage.name = [data.get("name"), data.get("family")].join(" ");
Glueon
На сайте с 26.07.2013
Offline
172
#8
ivan-lev:
Против 99% (как считали?) ботов работает скрытое от пользователя поле со стандартным именем (email, login, name), которое боты заполняют.. и/или добавленное заполненное JS-ом при выводе или submit-е формы.. При этом реальное поле просто с другим именем. Если у спамеров нет цели "на конкретный сайт", то такого вполне хватает.

Против Хрумера уже довольно давно (как минимум с 16 версии) этот способ не работает, если руки у человека прямые.

Есть много IP-сетей в аренду под прокси, парсинг, рассылки (optin), vpn и хостинг. Телега: @contactroot ⚒ ContactRoot команда опытных сисадминов (/ru/forum/861038), свой LIR: сдаем в аренду сети IPv4/v6 (/ru/forum/1012475).
Z0
На сайте с 03.09.2009
Offline
731
#9
Glueon:
Против Хрумера уже довольно давно (как минимум с 16 версии) этот способ не работает, если руки у человека прямые.

А руки у большинства спамеров как раз кривые 🤪

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий