Я создаю валидатор формы. И я хочу перейти на следующую страницу, только если все четыре валидатора верны. Я создал четыре стрелочные функции для валидаторов.
const nameIsValid = name => !name.match(nameRegX);
const mailIsValid = mail => mail.match(mailRegX);
const phoneIsValid = phone => phone.match(phoneRegX);
const postalIsValid = postal => postal.match(postRegX);
Каждая стрелочная функция привязана к прослушивателю событий при изменении ввода. Это выглядит так.
inputs[0].onchange = function() {
var validateName = nameIsValid(name.value);
animator(validateName, 0, isNameTrue);
}
Затем все четыре раза вводятся [1], [2] и [3].
В функции вы видите третий аргумент аниматора isNameTrue. Это переменные, которые я объявил перед функцией следующим образом:
var isNameTrue = false;
var isMailTrue = false;
var isPhoneTrue = false;
var isPostalTrue = false;
Затем, если стрелочная функция верна, я хочу, чтобы эти значения также были истинными, что я и делаю с помощью этой функции.
function animator(validity, i, isTrue){
var error = document.querySelectorAll(".form-error");
var correct = document.querySelectorAll(".form-display");
if (validity){
correct[i].classList.add("animate")
error[i].classList.remove("animate")
isTrue = true;
} else {
error[i].classList.add("animate")
correct[i].classList.remove("animate")
isTrue = false;
}
}
Затем, когда пользователь нажимает кнопку отправки, мне нужно только следующее действие, когда все четыре верны.
inputs[4].onclick = function(){
if (isNameTrue && isMailTrue && isPhoneTrue && isPostalTrue){
console.info("We are all true");
} else {
console.info("We are not true!")
}
}
Однако они всегда ложны.
Как я могу правильно проверить, все ли четыре верны?



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


boolean передаются по значению, следовательно, ссылка не такая же, что означает, что даже если вы измените значение в функции animator, значение переданной переменной не изменится.
Вы можете обновить свой код следующим образом
inputs[0].onchange = function() {
var validateName = nameIsValid(name.value);
isNameTrue = validateName; // <---- Set your value here and do not pass to the function
animator(validateName, 0);
}
@hyenax - Рад помочь вам :)