Я работаю с простой проверкой формы, и у меня есть 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();
});
});
&&
- оператор короткого замыкания. Это предотвращает оценку 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();
});