JQuery, возвращающий несколько функций, не работает

0

Я работаю с простой проверкой формы, и у меня есть 3 функции, где я проверяю входные текстовые поля, поле выбора и 2 переключателя. Для каждой группы я создал функцию, поэтому 3 функции.

Я сам тестировал функции, и они работают. Но если я использую их все вместе в конце моего сценария, работает только один из них.

Может ли кто-нибудь сказать мне, что мне нужно сделать?

// Form validation
$(function() {
    function wz_validation() {
        var ok = true;

        $('input[validate="true"]').each(function() {
            if($(this).val() == '') {
                ok = false;
                $(this).addClass('red_border');
            }
            else $(this).removeClass('red_border');
        });

        return ok;
    }

    // Check Bank select box on checkout page
    function wz_val_select() {
        if($(".payment select")) {
            if($(".payment select option:selected").val() == "") {
                $(".payment select").addClass('red_border');
                return false;
            }
            else{
                $(".payment select").removeClass('red_border'); 
                return true;
            }
        }
    }

    function wz_radio_shipping() {
        var form = $("#shipping_form");
        if(form.length) {
            if(form.find('input[name=wz_shipping]:checked').length == 0) {
                $("#checkout_shipping").addClass('red_border');
                return false;   
            }
            else{
                $("#checkout_shipping").removeClass('red_border');
                return true;    
            }
        }
    }

    var wz_form = $('#wz_form1, #wz_form2, #wz_form3, #wz_form7');

    $(wz_form).submit(function() {
        return wz_validation() && wz_radio_shipping() && wz_val_select();
    });
}); 
  • 0
    Проверьте это: api.jquery.com/deferred.then - Возможно, вам придется загружать одно, затем другое, затем другое.
Теги:
validation

1 ответ

4

&& - оператор короткого замыкания. Это предотвращает оценку b в a && b когда a является ложным.

Если вы хотите, чтобы все три функции вызывались, даже когда некоторые из них возвращали false, и если вы возвращаете только логические значения, используйте &. Как & 0 или 1, вы можете конвертировать результат в логическое с !! :

    return !!(wz_validation() & wz_radio_shipping() & wz_val_select());

Вы также можете написать его более явно:

$(wz_form).submit(function(e) {
    var good = true;
    good &= wz_validation();
    good &= wz_radio_shipping();
    good &= wz_val_select();
    if (!good)  e.preventDefault();
});
  • 0
    Для тех из нас (как и я), которые не понимали, это было в Javascript: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 0
    Хорошо, но проблема в том, что, если я использую «&», функции выполняют свою работу и выдают мои ошибки, но форма отправляется всегда. Поэтому я поместил функции в оператор if и сказал: if (functions & .. &) возвращает true, иначе возвращает false. Но теперь форма никогда не подчиняется ..
Показать ещё 9 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню