Хотелось бы услышать критику кода JavaScript
Всем привет, я занялась изучением веб разработке в январе, сейчас уже 5 месяц учусь, последние 2 месяца изучала java script, познакомилась с понятием ООП и решила начать делать pet проект в ООП стиле и хотелось бы услышать критику, как можно улучшить или может как-то изменить подход если это нужно, что бы можно было поддерживать и масштабировать проект, а так же переиспользовать код
Вот фрагмент первого класса для форм
По функциональности
1 метод - отправка формы, принимает селектор формы и url по которому будет отправлять форму
2 метод - валидация инпута, принимает селектор инпута, регулярное выражение и класс, который будет добавлен инпуту в случае не валидности (предназначен для любых инпутов)
3 метод - меняет тип инпута по нажатию на глазик с пасворд на текст и на оборот + меняет глазик на закрытый и открытый, (предназначен для паролей
export default class Form {
sendForm(formSelector, url) {
const form = document.querySelector(formSelector);
form.addEventListener('submit', (event) => {
const formData = new FormData(form);
event.preventDefault();
fetch(url, {
method: 'POST',
body: formData,
})
.then((response) => console.log(response))
.catch(() => console.log('error'));
});
}
validInput(inputSelector, regularExpressions, noValidCssClass) {
const input = document.querySelector(inputSelector);
input.addEventListener('blur', () => {
const inputValue = input.value.trim();
if(!regularExpressions.test(inputValue)) {
input.classList.add(noValidCssClass);
input.setAttribute('data-valid', 'false');
}
if(regularExpressions.test(inputValue)) {
input.classList.remove(noValidCssClass);
input.setAttribute('data-valid', 'true');
}
});
}
showHidePassword(openedEyeSelector, closedEyeSelector, activeSelector, InputSelector) {
const openedEye = document.querySelector(openedEyeSelector);
const closedEye = document.querySelector(closedEyeSelector);
const input = document.querySelector(InputSelector);
openedEye.addEventListener('click', () => {
if (/Mobi/.test(navigator.userAgent)) {
input.focus();
setTimeout( () => {
input.selectionStart = input.value.length;
input.selectionEnd = input.value.length;
});
}
input.setAttribute('type', 'text');
openedEye.classList.toggle(activeSelector);
closedEye.classList.toggle(activeSelector);
});
closedEye.addEventListener('click', () => {
if (/Mobi/.test(navigator.userAgent)) {
input.focus();
setTimeout( () => {
input.selectionStart = input.value.length;
input.selectionEnd = input.value.length;
});
}
input.setAttribute('type', 'password');
closedEye.classList.toggle(activeSelector);
openedEye.classList.toggle(activeSelector);
});
}
}
Во втором файле, который использует этот класс и методы такой код
import Form from './modules/form.mjs'
document.addEventListener('DOMContentLoaded', () =>{
const form = new Form;
form.showHidePassword('#opened', '#closed', 'form__password-eye_active', '#password');
form.validInput('#name', /^[a-zA-Zа-яА-Я\s]{2,32}$/, 'form__input_no-valid');
form.validInput('#email', /^[\w.\s-]{1,120}@[a-zA-Z0-9_-]{1,120}(?:\.[a-zA-Z0-9_-]{1,120}){1,2}$/, 'form__input_no-valid');
form.validInput('#password', /^(?=.*[a-zA-Zа-яА-Я])(?=.*[0-9]).{8,48}$/, 'form__input_no-valid');
form.sendForm('.form', 'ddd.php');
});