我为注册和登录表单编写了代码。最初您需要注册。表单检查“邮件”、“密码”字段中输入数据的有效性以及复选框中是否存在复选标记(据我所知,这里的代码在某处失败),然后单击“注册”按钮,输入的数据保存在 localStorage 中,注册表切换到登录表单。在登录表单中,还应检查字段,但已检查是否符合存储在 localStorage 中的数据。但是在单击复选框时,该脚本在注册表单中停止工作。请帮我找出错误。
JS:
'use strict'
//Переменные
//формы
const form_a = document.querySelector('#form-entr');
const form_b = document.querySelector('#form');
//авторизация и регистрация
const toformReg = document.querySelector('#form1');
const toformEntr = document.querySelector('#form2');
//подзаголовки
const preheader = document.querySelector('#preheader');
const preheader_entr = document.querySelector('#preheader_entr');
//переменная для проверки валидации почты
const emailChecker = /^(([^<>()[\].,;:\s@"]+(\.[^<>()[\].,;:\s@"]+)*)|(".+"))@(([^<>()[\].,;:\s@"]+\.)+[^<>()[\].,;:\s@"]{2,})$/iu;
//почта
const emailField = document.querySelector('#e-mail');
const email_entr = document.querySelector('#e-mail_entr');
//пароли
const password = document.querySelector('#password');
const password_entr = document.querySelector('#password_entr');
//звезды
const star1 = document.querySelector('#star1');
const star2 = document.querySelector('#star2');
const star3 = document.querySelector('#star3');
//ошибки
const error = document.querySelector('#error');
const errorpass = document.querySelector('#errorpass');
const errorpass2 = document.querySelector('#errorpass2');
const errorpass3 = document.querySelector('#errorpass3');
const errorEntr = document.querySelector('#errorEntr');
//чекбокс
const checkbox1 = document.querySelector('#box1');
const checkbox2 = document.querySelector('#box2');
//кнопки
const btn = document.querySelector('#btn');
const btn_entr = document.querySelector('#btn_entr');
//переменные сравнения
let a = false;
let b = false;
let c = false;
let d = false;
let e = false;
let f = false;
//переключение между окнами при нажатии на надпись "Зарегистрироваться"
function goToRegistration(){
form_a.style.visibility = 'collapse';
form_b.style.visibility = 'visible';
}
toformReg.addEventListener('click', goToRegistration);
//переключение между окнами при нажатии на надпись "Авторизоваться"
function goToEntrance(){
form_b.style.visibility = 'collapse';
form_a.style.visibility = 'visible';
}
toformEntr.addEventListener('click', goToEntrance);
//Форма регистрации
//проверка е-mail на валидность
function isEmailValid(value) {
return emailChecker.test(value);
}
function onInput() {
if (isEmailValid(emailField.value)) {
emailField.style.borderColor = 'green';
error.style.display = 'none';
preheader.style.color = 'black';
star1.style.color = 'black';
a = true;
} else {
emailField.style.borderColor = 'red';
preheader.style.color = 'red';
error.style.display = 'initial';
star1.style.color = 'red';
a = false;
}
}
emailField.addEventListener('keyup', onInput);
//проверка пароля на валидность
function passValidation() {
if (password.value.length === 0) {
password.style.borderColor = 'red';
errorpass.style.display = 'initial';
preheader_entr.style.color = 'red';
errorpass2.style.display = 'none';
star2.style.color = 'red';
b = false;
} else if (password.value.length > 0 && password.value.length < 8) {
password.style.borderColor = 'red';
errorpass2.style.display = 'initial';
preheader_entr.style.color = 'red';
star2.style.color = 'red';
b = false;
} else {
password.style.borderColor = 'green';
errorpass.style.display = 'none';
errorpass2.style.display = 'none';
preheader_entr.style.color = 'black';
star2.style.color = 'black';
b = true;
}
}
password.addEventListener('keyup', passValidation);
//проверка чекбокса
function checkboxValid() {
if (!checkbox1.checked === false) {
checkbox1.style.borderColor = 'black';
errorpass3.style.display = 'none';
c = true;
} else {
checkbox1.style.borderColor = 'red';
errorpass3.style.display = 'initial';
star3.style.color = 'red';
c = false;
}
}
checkbox1.addEventListener('change', checkboxValid);
//проверка на соответствие всем 3-м условиям регистрации
function formValidation(evt) {
if (a === true && b === true && c === true) {
evt.preventDefault();
console.log(emailField.value);
console.log(password.value);
//запись данных в localStorage
//запись e-mail
let emailLS = {email: emailField.value};
let serialEmailLS = JSON.stringify(emailLS);
localStorage.setItem("KeyEmail", serialEmailLS);
//запись пароля
let passwordLS = {password: password.value};
let serialPasswordLS = JSON.stringify(passwordLS);
localStorage.setItem("KeyPass", serialPasswordLS);
}
//переключение на окно входа
goToEntrance();
}
form_b.addEventListener('submit', formValidation)
//Форма Вход
//переменные пароля и почты сохраненные в localStorage
let returnEMailLS = {};
let returnPasswordLS = {};
//проверка e-mail в форме Вход
function emailEnterValidation(){
returnEMailLS = JSON.parse(localStorage.getItem("KeyEmail"));
if (email_entr.value === returnEMailLS.email){
email_entr.style.borderColor = 'green';
preheader_entr.style.color = 'black';
star1.style.color = 'black';
d = true;
} else {
email_entr.style.borderColor = 'red';
preheader_entr.style.color = 'red';
star1.style.color = 'red';
errorEntr.style.display = 'initial';
d = false;
}
}
email_entr.addEventListener('keyup',emailEnterValidation);
//проверка пароля
function passwordEnterValidation(){
returnPasswordLS = JSON.parse(localStorage.getItem("KeyPass"));
if (password_entr.value === returnPasswordLS.password){
password_entr.style.borderColor = 'green';
errorpass.style.display = 'none';
errorEntr.style.display = 'none';
preheader_entr.style.color = 'black';
star2.style.color = 'black'
e = true;
} else {
preheader_entr.style.color = 'red';
password_entr.style.borderColor = 'red';
errorEntr.style.display = 'initial';
star2.style.color = 'red';
e = false;
}
}
password_entr.addEventListener('keyup', passwordEnterValidation);
//проверка чекбокса
function enterCheckboxValidation() {
if (!checkbox2.checked === false) {
checkbox2.style.borderColor = 'black';
errorpass3.style.display = 'none';
f = true;
} else {
checkbox2.style.borderColor = 'red';
errorpass3.style.display = 'initial';
star3.style.color = 'red';
f = false;
}
}
checkbox2.addEventListener('change', checkboxValid);
//проверка на соответствие условиям входа
function validEnter(evt){
if (d === true && e === true && f === true){
evt.preventDefault();
window.location.href = 'empty_index.html';
}
}
form_a.addEventListener('submit', validEnter);
HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="../module_two_javascript/normalize.css">
<link rel="stylesheet" href="../module_two_javascript/style.css">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet">
<title>Form</title>
</head>
<body>
<!--Форма "Вход"-->
<form class = "form-a" id = "form-entr">
<p class = "form-a__registration" id = "form1">Зарегистрироваться</p>
<h1 class = "form-a__header">Вход</h1>
<p class = "form-a__preheader" id = "preheader_entr">E-mail</p>
<div class = "form-a__container">
<span class = "form-a__star" id = "star1">*</span>
<input class = "form-a__field" type = "text" id = "e-mail_entr" placeholder = "Введите e-mail">
</div>
<p class = "form-a__error" id = "error">Поле обязательно для заполнения</p>
<p class = "form-a__preheader" id = "preheaderpass">Пароль</p>
<div class = "form-a__container">
<span class = "form-a__star" id = "star2">*</span>
<input class = "form-a__field" type = "password" id = "password_entr" placeholder = "Введите пароль">
</div>
<p class = "form-a__error" id = "errorpass">Поле обязательно для заполнения</p>
<p class = "form-a__error" id = "errorEntr">Пароль или логин неверный</p>
<div class = "form-a__pc">
<div class = "form-a__checkbox">
<div class = "form-a__container">
<span class = "form-a__star" id = "star3">*</span>
<input class = "form-a__box" type = "checkbox" id = "box1" value = "check">
</div>
<label for = "box" class = "form-a__text">Я согласен получать обновления на почту</label>
</div>
<p class = "form-a__error" id = "errorpass3">Поле обязательно для заполнения</p>
</div>
<button class = "form-a__send" id = "btn_entr" type = "submit">
Войти
</button>
</form>
<!--Форма "Регистрация"-->
<form class = "form-b" id = "form">
<p class = "form-b__registration" id = "form2">Авторизоваться</p>
<h1 class = "form-b__header">Регистрация</h1>
<p class = "form-b__preheader" id = "preheader">E-mail</p>
<div class = "form-b__container">
<span class = "form-b__star" id = "star">*</span>
<input class = "form-b__field" type="text" id = "e-mail" placeholder = "Введите e-mail">
</div>
<p class = "form-b__error" id = "error">Поле обязательно для заполнения</p>
<p class = "form-b__preheader" id = "preheaderpass">Пароль</p>
<div class = "form-b__container">
<span class = "form-b__star" id = "star">*</span>
<input class = "form-b__field" type = "password" id = "password" placeholder="Введите пароль">
</div>
<p class = "form-b__error" id = "errorpass">Поле обязательно для заполнения</p>
<p class = "form-b__error" id = "errorpass2">Пароль должен содержать как минимум 8 символов</p>
<div class = "form-b__pc">
<div class = "form-b__checkbox">
<div class = "form-b__container">
<span class = "form-b__star" id = "star">*</span>
<input class = "form-b__box" type="checkbox" id = "box2" value = "check">
</div>
<label for = "box" class = "form-b__text">Я согласен получать обновления на почту
</label>
</div>
<p class = "form-b__error" id = "errorpass3">Поле обязательно для заполнения</p>
</div>
<button class = "form-b__send" id = "btn" type = "submit">
Регистрация
</button>
</form>
<script src = "../module_two_javascript/script_exam.js"></script>
</body>
</html>
CSS:
body {
max-width: 1440px;
max-height: 769px;
background-color: #1B2473;
font-family: 'Roboto', sans-serif;
position:relative;
}
@media screen and (max-width:768px) {
.body{
max-width: 768px;
}
}
.form-a{
position:absolute;
top:82px;
left:412px;
width: 600px;
height: fit-content;
background: #FFFFFF;
box-shadow: 0px 0px 40px 10px rgba(0, 0, 0, 0.25);
border-radius: 20px;
margin-left: auto;
margin-right: auto;
margin-top:82px;
display:flex;
flex-direction:column;
visibility: visible;
}
.form-b{
position:absolute;
top:82px;
left:412px;
width: 600px;
height: fit-content;
background: #FFFFFF;
box-shadow: 0px 0px 40px 10px rgba(0, 0, 0, 0.25);
border-radius: 20px;
margin-left: auto;
margin-right: auto;
margin-top:82px;
display:flex;
flex-direction:column;
visibility: collapse;
}
@media screen and (max-width: 768px){
.form-a, .form-b{
width: 728px;
height: fit-content;
}
}
.form-a__preheader, .form-b__preheader{
font-weight: 700;
font-size: 16px;
line-height: 16px;
color: #787878;
margin-left:45px;
margin-bottom:7px;
}
@media screen and (max-width:768px){
.form-a__preheader, .form-b__preheader{
font-size: 24px;
}
}
.form-a__header{
width: 115px;
height: 50px;
font-weight: 700;
font-size: 50px;
line-height: 50px;
color: #787878;
margin-left:auto;
margin-right:auto;
margin-bottom:0px;
margin-top:15px;
}
.form-b__header{
width: 115px;
height: 50px;
font-weight: 700;
font-size: 50px;
line-height: 50px;
color: #787878;
margin-left:25%;
margin-right:auto;
margin-bottom:0px;
margin-top:20px;
}
@media screen and (max-width:768px){
.form-a__header, .form-b__header{
width: 138px;
font-size: 60px;
}
}
.form-a__field, .form-b__field{
width: 509px;
height: 49px;
background: #FFFFFF;
border: 2px solid #787878;
border-radius: 10px;
margin-left:0px;
margin-right:auto;
margin-bottom:0px;
font-weight: 700;
font-size: 28px;
line-height: 36px;
color: #CCCCCC;
}
@media screen and (max-width:768px){
.form-a__field, .form-b__field{
width: 638px;
height: 49px;
}
}
.form-a__error, .form-b__error{
display:none;
font-weight: 500;
font-size: 10px;
line-height: 16px;
color: #CB2424;
margin-left:45px;
margin-right:auto;
margin-bottom:12px;
}
.form-a__star, .form-b__star{
width: 7px;
height: 12px;
color: #787878;
}
.form-a__pc, .form-b__pc{
width: 638px;
height:fir-content;
display: flex;
flex-direction:column;
justify-content:flex-start;
}
.form-a__box, .form-b__box{
width: 24px;
height: 24px;
border: 2px solid #787878;
border-radius: 7px;
margin-left:0px;
margin-right:10px;
}
@media screen and (max-width:768px){
.form-a__box, .form-b__box{
width: 32px;
height: 32px;
}
}
.form-a__checkbox, .form-b__checkbox{
width:100%;
display:flex;
flex-direction:row;
}
.form-a__text, .form-b__text{
width: 278px;
height: 16px;
font-weight: 400;
font-size: 14px;
line-height: 16px;
color: #787878;
margin-top:3px;
}
@media screen and (max-width:768px){
.form-a__text, .form-b__text{
width: 358px;
font-size: 18px;
}
}
.form-a__send, .form-b__send{
width: 180px;
height: 52px;
background-color: #1A226B;
border-radius: 10px;
font-weight: 700;
font-size: 24px;
line-height: 16px;
color: #FFFFFF;
margin-left:auto;
margin-right:auto;
margin-top:15px;
margin-bottom:26px;
}
@media screen and (max-width:768px){
.form-a__send, .form-b__send{
width: 220px;
height: 80px;
font-size: 32px;
}
}
.form-a__container, .form-b__container{
display:flex;
flex-direction:row;
}
.form-a__star, .form-b__star{
margin-left:34px;
margin-right:4px;
}
.form-a__registration, .form-b__registration{
width: 137px;
height: 16px;
font-weight: 700;
font-size: 14px;
line-height: 16px;
color: #1A226B;
margin-left:70%;
margin-top:10px;
}
.form-a__registration:hover{
font-size: 14px;
color: green;
}
.form-b__registration:hover{
font-size: 14px;
color: green;
}
@media screen and (max-width:768px) {
.body {
max-width: 768px;
}
}
.form {
width: 600px;
height: 412px;
background: #FFFFFF;
box-shadow: 0px 0px 40px 10px rgba(0, 0, 0, 0.25);
border-radius: 20px;
margin-left: auto;
margin-right: auto;
margin-top: 82px;
display: flex;
flex-direction: column;
}
@media screen and (max-width: 768px) {
.form {
width: 728px;
height: 697px;
}
}
.form__preheader {
font-weight: 700;
font-size: 16px;
line-height: 16px;
color: #787878;
margin-left: 45px;
margin-bottom: 7px;
}
@media screen and (max-width:768px) {
.form__preheader {
font-size: 24px;
}
}
.form__header {
width: 115px;
height: 50px;
font-weight: 700;
font-size: 50px;
line-height: 50px;
color: #787878;
margin-left: auto;
margin-right: auto;
margin-bottom: 0px;
margin-top: 26px;
}
@media screen and (max-width:768px) {
.form__header {
width: 138px;
font-size: 60px;
}
}
.form__field {
width: 509px;
height: 49px;
background: #FFFFFF;
border: 2px solid #787878;
border-radius: 10px;
margin-left: auto;
margin-right: auto;
margin-bottom: 0px;
font-weight: 700;
font-size: 28px;
line-height: 36px;
color: #CCCCCC;
}
@media screen and (max-width:768px) {
.form__field {
width: 638px;
height: 49px;
}
}
.form__error {
display: none;
font-weight: 500;
font-size: 10px;
line-height: 16px;
color: #CB2424;
margin-left: 45px;
margin-right: auto;
margin-bottom: 12px;
}
.form__star {
width: 7px;
height: 12px;
color: #787878;
}
.form__pc {
width: 638px;
height: fir-content;
display: flex;
flex-direction: column;
justify-content: flex-start;
}
.form__box {
width: 24px;
height: 24px;
border: 2px solid #787878;
border-radius: 7px;
margin-left: 45px;
margin-right: 10px;
}
@media screen and (max-width:768px) {
.form__box {
width: 32px;
height: 32px;
}
}
.form__checkbox {
width: 100%;
display: flex;
flex-direction: row;
}
.form__text {
width: 278px;
height: 16px;
font-weight: 400;
font-size: 14px;
line-height: 16px;
color: #787878;
margin-top: 3px;
}
@media screen and (max-width:768px) {
.form__text {
width: 358px;
font-size: 18px;
}
}
.form__send {
width: 180px;
height: 52px;
background-color: #1A226B;
border-radius: 10px;
font-weight: 700;
font-size: 24px;
line-height: 16px;
color: #FFFFFF;
margin-left: auto;
margin-right: auto;
margin-top: 26px;
}
@media screen and (max-width:768px) {
.form__send {
width: 220px;
height: 80px;
font-size: 32px;
}
}
Если не ошибаюсь тут напутали
checkbox1
иcheckbox2
. В форма регистрации у вас сейчасcheckbox1
, а должно бытьcheckbox2
, поменяйте наcheckbox2
и должно сохраниться в localStorage