после того, как логическая переменная false не возвращает true в других случаях

#javascript #jquery #html #if-statement

#javascript #jquery #HTML #if-оператор

Вопрос:

У меня есть следующий код

 $(function(){

    var isValid = function(test_obj, element){
        if(!test_obj.val().length > 0){
            element.addClass('has-error');
            return false;
        }else{
            element.removeClass('has-error');
            return true;
        }
    };
    $('#rta_parties_form').submit(function(event){

        var formSubmit;

        formSubmit = isValid($('#rta_cl_fn'), $('#div_cl_fn'));
        formSubmit = isValid($('#rta_cl_ln'), $('#div_cl_ln'));
        formSubmit = isValid($('#rta_cl_ph'), $('#div_cl_ph'));
        formSubmit = isValid($('#rta_cl_mob'), $('#div_cl_mob'));

        if(!formSubmit){
            event.preventDefault();
        }else{
            alert('formSubmit successfully');
        }


    });
});
 

Как вы можете видеть, я использую formSubmit = isValidToggle($('#rta_cl_fn') , $('#div_cl_fn')); в четырех разных случаях. Моя проблема: допустим, в первых 3 экземплярах он возвращается false , но в четвертом экземпляре он возвращается true , затем он успешно отправит форму?

Есть ли какой-либо способ проверить, возвращает ли какой-либо из этих экземпляров false или устанавливает для всех экземпляров значение false so, чтобы форма не отправлялась?

Я знаю, что могу использовать вложенные if операторы, но тогда какой смысл использовать функцию? Я хотел избежать использования нескольких if операторов в моем коде. Вот почему я написал функцию; в противном случае я мог бы просто использовать код функции в моем реальном коде и установить formSubmit значение false .

Есть идеи?

Комментарии:

1. Вы можете использовать счетчик ошибок, который говорит «есть ошибки», и в конце вашего кода вы проверяете, равен ли счетчик> 0. Если да, не отправляйте. В противном случае, суммировать форму?

Ответ №1:

Вы можете использовать это, более удобное в обслуживании

 var tmp = [$('#div_cl_fn'), $('#div_cl_ln'), $('#div_cl_ph'), $('#div_cl_mob')];

var i = -1;
while (  i < tmp.length)
{
    if (!isValidToggle($('#rta_cl_mob'), tmp[i]))
    {
        event.preventDefault();
        break;
    }
}
 

Если вы хотите добавить что-то для проверки, просто добавьте запись в массив

Или

 for (var i in toCheck = [$('#div_cl_fn'),
                         $('#div_cl_ln'),
                         $('#div_cl_ph'),
                         $('#div_cl_mob')])
{
    if (!isValidToggle($('#rta_cl_mob'), toCheck[i]))
    {
        event.preventDefault();
        break;
    }
}
 

Комментарии:

1. мой вопрос не самый последний пункт, мой пункт позволяет пользователю заполнить все текстовые поля, но оставить пустое в середине условие будет истинным, потому что будут заполнены некоторые текстовые поля, если вы понимаете, что я имею в виду … спасибо

Ответ №2:

Вы должны использовать его как

 formSubmit = isValidToggle($('#rta_cl_fn'), $('#div_cl_fn'));
formSubmit = formSubmit amp;amp; isValidToggle($('#rta_cl_ln'), $('#div_cl_ln'));
formSubmit = formSubmit amp;amp; isValidToggle($('#rta_cl_ph'), $('#div_cl_ph'));
formSubmit = formSubmit amp;amp; isValidToggle($('#rta_cl_mob'), $('#div_cl_mob'));
 

Ответ №3:

Вы можете сделать следующее

     var formSubmit1, formSubmit2, formSubmit3, formSubmit4;
    formSubmit1 = isValidToggle($('#rta_cl_fn'), $('#div_cl_fn'));
    formSubmit2 = isValidToggle($('#rta_cl_ln'), $('#div_cl_ln'));
    formSubmit3 = isValidToggle($('#rta_cl_ph'), $('#div_cl_ph'));
    formSubmit4 = isValidToggle($('#rta_cl_mob'), $('#div_cl_mob'));

    if(!formSubmit1 || !formSubmit2 || !formSubmit3 || !formSubmit4){
        event.preventDefault();
    }else{
        alert('formSubmit successfully');
    }
 

Комментарии:

1. У меня есть около 30 полей для проверки, мне нужно посмотреть на цикл, я думаю …. или у вас есть хорошая идея?

Ответ №4:

Попробуйте это… Вы можете сделать это в одной строке…

 formSubmit = isValidToggle($('#rta_cl_fn'), $('#div_cl_fn')) amp;amp; isValidToggle($('#rta_cl_ln'), $('#div_cl_ln')) amp;amp;  isValidToggle($('#rta_cl_ph'), $('#div_cl_ph')) amp;amp; isValidToggle($('#rta_cl_mob'), $('#div_cl_mob'))
 

в этом случае сначала проверяется одно условие, и если оно истинно, то оно проверяет дальнейшее условие, иначе оно выведет вас из игры.

Ответ №5:

Все проверки будут выполнены.

 $(function(){

    var formValid,
        isValid = function(test_obj, element){
        if(!test_obj.val().length > 0){
            element.addClass('has-error');
        }else{
            element.removeClass('has-error');
            formValid = true;
        }
    };
    $('#rta_parties_form').submit(function(event){

        var formSubmit;
        formValid = false;

        isValidToggle($('#rta_cl_fn'), $('#div_cl_fn'));
        isValidToggle($('#rta_cl_ln'), $('#div_cl_ln'));
        isValidToggle($('#rta_cl_ph'), $('#div_cl_ph'));
        isValidToggle($('#rta_cl_mob'), $('#div_cl_mob'));

        if(!formValid){
            event.preventDefault();
        }else{
            alert('formSubmit successfully');
        }


    });
});
 

Комментарии:

1. Г-н Йоханнес isValidToggle() в основном isValid() , но он не работает здесь, на моей стороне, есть идеи, почему?

Ответ №6:

Большое всем спасибо, но я получил то, что хотел, я помещаю этот код здесь, если кто-то еще захочет использовать код в будущем…

 $(function(){

    //below is one way using function
    var isValid = function(test_obj, element){
        if(!test_obj.val().length > 0){
            element.addClass('has-error');
            return false;
        }else{
            element.removeClass('has-error');
            return true;
        }
    };

    $('#rta_parties_form').submit(function(event){

        var formSubmit = [];

        formSubmit[0] = isValid($('#rta_cl_fn'), $('#div_cl_fn'));
        formSubmit[1] = isValid($('#rta_cl_ln'), $('#div_cl_ln'));
        formSubmit[2] = isValid($('#rta_cl_ph'), $('#div_cl_ph'));
        formSubmit[3] = isValid($('#rta_cl_mob'), $('#div_cl_mob'));

        var validForm = true;
        for (var i = 0; i < formSubmit.length; i  ) {
            if(formSubmit[i] == false){
                validForm = false;
            }
        };

        if(!validForm){
            event.preventDefault();
        }else{
            alert('formSubmit successfully');
        }

    });

});
 

Для меня это работает нормально, спасибо всем еще раз за вашу помощь..