#javascript #html #css
Вопрос:
Я создал форму, которая проверяет, действительно ли электронное письмо, и если оно действительно, то оно будет отправлено. Я не уверен, но я думаю, что он не отправляется, потому что я добавил .preventDefault, но если я не использую preventDefault, форма не будет проверять правильность и напрямую отправлять. Я все еще учусь использовать javascript, пожалуйста, помогите мне исправить мою ошибку. Спасибо
кодовое обозначение : https://codepen.io/jerico001/pen/yLMZyWJ
HTML
<form id="form" class="form" novalidate>
<div class="form-control">
<input
type="email"
placeholder="Email address"
id="email"
class="email"
name="email"
/>
<small></small>
<button class="submit">Request Access</button>
</div>
</form>
JS
const form = document.getElementById("form");
const email = document.getElementById("email");
const regx =
/^[a-zA-Z0-9.!#$%amp;'* /=?^_`{|}~-] @[a-zA-Z0-9-] (?:.[a-zA-Z0-9-] )*$/;
form.addEventListener("submit", (e) => {
e.preventDefault();
checkInputs();
});
function checkInputs() {
const emailValue = email.value.trim();
if (emailValue.match(regx)) {
setSuccessFor(email);
} else {
setErrorFor(email, "Looks like this is not an email");
}
}
function setErrorFor(input, message) {
const formControl = input.parentElement;
const small = formControl.querySelector("small");
formControl.className = "form-control error";
small.innerText = message;
}
function setSuccessFor(input) {
const formControl = input.parentElement;
formControl.className = "form-control success";
}
Комментарии:
1. Я не вижу, куда вы отправляете форму
2. Вы могли бы сделать это с помощью требуемого атрибута и псевдокласса :допустимо codepen.io/gc-nomade/pen/XWMObeE (без javascript)
Ответ №1:
Вы неправильно настраиваете прослушиватель событий, и это предотвращает возможную отправку. Поместите событие на кнопку «Отправить» и введите эту кнопку= «отправить».
<button type="submit" class="submit">Request Access</button>
Затем в вашем сценарии проверьте, не возвращает ли функция проверки значение true/false, чтобы решить, отправлять форму или нет
const form = document.getElementById("form");
const btn = document.querySelector('button.submit');
btn.addEventListener("click", (e) => {
e.preventDefault();
if (checkInputs()) form.submit()
});
function checkInputs() {
const emailValue = email.value.trim();
if (emailValue.match(regx)) {
setSuccessFor(email);
return true;
} else {
setErrorFor(email, "Looks like this is not an email");
return false;
}
}