Hello today after few weeks of learning I tried some form validation.
I am wondering how I could improve my code and what things I missed.
Here is a preview hosted on github + repository.
And here is my code :
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="main.css">
<link href="https://fonts.googleapis.com/css2?family=Rubik:wght@300;400;500;600;700&display=swap" rel="stylesheet">
<title>Form validation</title>
</head>
<body>
<form action="#" class="form">
<h2>Contact with us</h2>
<div class="wrapper">
<div>
<input type="text" name="name" class='input-name' id='input' placeholder="First name *" required>
<p id='input-name-p' class='p-hidden'></p>
</div>
<div>
<input type="text" name="surname" class='input-surname' id='input' placeholder="Surname">
<p id='input-surname-p' class='p-hidden'></p>
</div>
<div>
<input type="text" name="email" class='input-email' id='input' placeholder="E-mail *" required>
<p id='input-email-p' class='p-hidden'></p>
</div>
<div>
<input type="text" name="phone" class='input-phone' id='input' placeholder="Phone number">
<p id='input-phone-p' class='p-hidden'></p>
</div>
<textarea name="message" rows="8" cols="80" class='input-message' id='input' placeholder="Message *" required></textarea>
<button href="#" class="btn">Submit</button>
</div>
</form>
<script type="text/javascript" src="script.js">
</script>
</body>
</html>
JS
'use strict';
const submit = document.querySelector('.btn');
const name = document.querySelector('.input-name');
const surname = document.querySelector('.input-surname');
const email = document.querySelector('.input-email');
const phone = document.querySelector('.input-phone');
const items = document.querySelectorAll('#input');
const isValid = function(item) {
for (let i = 0; i < item.length; i++) {
if (item[i].value){ // Check if contains value
let error = document.getElementById(`${item[i].className}-p`);
const letters = /^[A-Za-z]+$/;
const numbers = /^\d+$/;
let inputLength = item[i].value.length;
switch (item[i].className){
case 'input-name':
case 'input-surname':
if(!letters.test(item[i].value)){ // Invalid input
error.textContent = 'Invalid data';
error.classList.remove('p-hidden');
}else
error.classList.add('p-hidden');
break;
case 'input-email':
if(!item[i].value.includes('.') || !item[i].value.includes('@') || !letters.test(item[i].value[inputLength-1]) ){ // check if includes (@ or .) and check if the last index is a letter
error.textContent = 'Invalid data';
error.classList.remove('p-hidden');
}else
error.classList.add('p-hidden');
break;
case 'input-phone':
if(!numbers.test(item[i].value) || inputLength<5){ // Invalid input
error.textContent = 'Invalid data';
error.classList.remove('p-hidden');
}else
error.classList.add('p-hidden');
break;
}
}
}
}
for (let i = 0; i < items.length; i++) {
items[i].addEventListener('click',function(){
// Check if the input is valid
isValid(items);
});
}