Я пытался сделать простую проверку формы HTML через Javascript
Я уже некоторое время борюсь с этим на нескольких примерах, и независимо от того, что я следую, моя индексная страница продолжает загружаться после нажатия кнопки на форме, я считаю, что я поместил return false в правильные места, чтобы сломать остальная часть выполнения кода, есть идеи, почему это так? «Мой» код ниже
Примечание: я пробовал использовать атрибут novalidate с формой, это деактивирует проверку браузера, но по-прежнему отправляет меня на мою страницу индекса. Идеальная функциональность не должна загружать страницу индекса и оставаться на странице регистрации с предупреждениями под правильными полями ввода.
index.php
<?php
if (isset($_POST["register"]))
{
$user = $_POST["username"];
echo "Welcome ".$user;
}
?>
register.php
<!DOCTYPE html>
<html>
<head>
<title>Form validation with javascript</title>
<link rel = "stylesheet" type = "text/css" href = "style.css">
</head>
<body>
<div id = "wrapper">
<form novalidate method = "POST" action = "index.php" onsubmit = "return Validate()" name = "vform">
<div>
<input type = "text" name = "username" class = "textInput" placeholder = "Username">
<div id = "name_error" class = "val_error"></div>
</div>
<div>
<input type = "email" name = "email" class = "textInput" placeholder = "Email">
<div id = "email_error" class = "val_error"></div>
</div>
<div>
<input type = "password" name = "password" class = "textInput" placeholder = "Password">
</div>
<div>
<input type = "password" name = "password_confirmation" class = "textInput" placeholder = "Password confirmation">
<div id = "password_error" class = "val_error"></div>
</div>
<div>
<input type = "submit" value = "Register" class = "btn" name = "register">
</div>
</form>
</div>
</body>
</html>
<!-- Adding javascript -->
<script type = "text/javascript">
// GETTING ALL INPUT TEXT OBJECTS
var username = document.forms["vform"]["username"];
var email = document.forms["vform"]["email"];
var password = document.forms["vform"]["password"];
var password_confirmation = document.forms["vform"]["password_confirmation"];
// GETTING ALL ERROR DISPLAY OBJECTS
var name_error = document.getElementId("name_error");
var email_error = document.getElementId("email_error");
var password_error = document.getElementId("password_error");
// SETTING ALL EVENT LISTENERS
username.addEventListener("blur", nameVerify, true);
email.addEventListener("blur", emailVerify, true);
password.addEventListener("blur", passwordVerify, true);
// Validation Function
function Validate(){
// Username Validation
if (username.value == ""){
username.style.border = "1px solid red";
name_error.textContent = "Username is required";
username.focus();
return false;
}
// Email Validation
if (email.value == ""){
email.style.border = "1px solid red";
email_error.textContent = "email is required";
email.focus();
return false;
}
// Password Validation
if (password.value == ""){
password.style.border = "1px solid red";
password_error.textContent = "password is required";
password.focus();
return false;
}
// check if the two passwords match
if (password.value != password_confirmation.value)
{
pasword.style.border = "1px solid red";
pasword_confirmation.style.border = "1px solid red";
password_error.innerHTML = "The two passwords dont match";
return false;
}
}
// event handler functions
function nameVerify(){
if (username.value != "")
{
username.style.border = "1px solid #5E6E66";
name_error.innerHTML = "";
return true;
}
}
function emailVerify(){
if (email.value != "")
{
email.style.border = "1px solid #5E6E66";
email_error.innerHTML = "";
return true;
}
}
function passwordVerify(){
if (passwprd.value != "")
{
passwprd.style.border = "1px solid #5E6E66";
passwprd_error.innerHTML = "";
return true;
}
}
</script>
style.css
#wrapper{
width: 35%;
margin: 50px auto;
padding: 20px;
background: #EFFFE0;
}
form{
width: 50%;
margin: 100px auto;
}
form div{
margin: 3px auto;
}
.textInput{
margin-top: 2px;
height: 28px;
border: 1px solid #5E6E66;
font-size: 16px;
padding: 1px;
width: 100%;
}
.btn{
padding: 7px;
width: 100%;
}
.val_error{
color: #FF1F1F;
}
Большое спасибо за любую помощь, которую вы можете предоставить!
Ах, да, вы правы, к сожалению, он все еще подталкивает меня к форме индекса при щелчке мышью: /
Значит, вещь preventDefault.
Что сказал @ Chay22: замените function Validate(){ на function Validate(event){ и вместо return false; (или перед ними в дополнение) используйте event.preventDefault();, чтобы остановить продолжение события отправки.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Назначьте идентификатор своей форме, прикрепите к ней событие отправки формы, и если проверка не удалась, вы можете использовать event.preventDefault (); чтобы остановить отправку формы. Попробуйте приведенный ниже код.
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<form action = "your_file_name.php" method = "post" id = "myForm">
First name:<br>
<input type = "text" name = "firstname" id = "firstname">
<br>
Last name:<br>
<input type = "text" name = "lastname" id = "lastname" >
<br><br>
<input type = "submit" value = "Submit">
</form>
$( "#myForm" ).submit(function(event) {
if ($("#firstname").val()== "" || $("#lastname").val()== "") //Your validation conditions.
{
alert("Kindly fill all fields.");
event.preventDefault();
}
//submit the form.
});
</script>
</html>
Нет ли опечатки в
passwprd? внутри функцииpasswordVerify?