-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
53 lines (50 loc) · 1.42 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// Hamburger menu
const mobileNav = document.querySelector('.mobile-nav');
const menuBtn = document.querySelector('.icon-menu');
const mobileNavLinks = document.querySelectorAll('.mobile-nav-links > li');
let menuClasses = ['icon-menu', 'icon-cancel'];
let i = 0;
menuBtn.addEventListener('click', () => {
mobileNav.classList.toggle('active');
menuBtn.className = menuClasses[1 - i];
i = 1 - i;
});
mobileNavLinks.forEach((navLink) => {
navLink.addEventListener('click', () => {
mobileNav.classList.remove('active');
menuBtn.className = menuClasses[0];
i = 0;
});
});
// Form validation
const formInputs = {
name: document.querySelector(`#name`),
email: document.querySelector(`#email`),
message: document.querySelector(`#message`),
};
const regex = {
name: /^(\b[a-z]+\b\s?){1,3}$/i,
email: /^([a-z\d\.-_]+)@([a-z\d-]+)\.([a-z]{2,8})(\.[a-z]{2,8})?$/i,
message: /.+/i,
};
// Validate form while user is typing
for (let input in formInputs) {
formInputs[input].addEventListener(`input`, (e) => {
if (regex[input].test(e.target.value)) {
e.target.className = `valid`;
return;
}
e.target.className = `invalid`;
});
}
// Validate form when it's submitted
const form = document.querySelector(`form`);
form.addEventListener(`submit`, (e) => {
for (let input in formInputs) {
if (!regex[input].test(formInputs[input].value)) {
formInputs[input].className = `invalid`;
e.preventDefault();
}
}
form.reset();
});