Как проверить, все ли функции стрелок верны? - PullRequest
0 голосов
/ 31 октября 2018

Я создаю форму валидатора. И я только хочу перейти на следующую страницу, если все четыре валидатора верны. Я создал четыре функции стрелок для валидаторов.

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;

Тогда, если функция стрелки имеет значение true, я хочу также обратить эти значения в true, что я и делаю с помощью этой функции.

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.log("We are all true");
    } else {
        console.log("We are not true!")
    }

}

Однако они всегда ложные.

Как я могу правильно проверить, все ли четыре верны?

1 Ответ

0 голосов
/ 31 октября 2018

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);  
}
...