предотвратить отправку формы jQuery, если проверка не удалась

Привет, я пытаюсь предотвратить эту функцию отправки формы AJAX, когда проверка не выполняется на одном из различных входов.

Изменить: я хочу точно знать, что мне нужно включить в //Проверку возраста для взрослых и var handleFormSubmit, чтобы остановить saveForm($('#quotecriteria_form')); и выполнить AjaxSubmit (formData, URL); от происходящего.

Отправить функцию:

  var handleFormSubmit = function( e ) {
e.preventDefault();

var $submit = $('button[type="submit"]');
$submit.addClass('loading');

// Save the contents of the form to session cookie
saveForm($('#quotecriteria_form'));

var formData = $('#quotecriteria_form').serialize();
var url = $('#quotecriteria_form').attr('action');
performAjaxSubmit(formData, url);
}

функции проверки инициализированы:

IndexPageFunctions = {
init: function() {
//Validate date range
this.validateToDate();
this.validateFromDate();
//Validate adult age
this.validateAdultAge0();
this.validateAdultAge1();
this.validateAdultAge2();
this.validateAdultAge3();
//Validate child age
this.validateChildAge0();
this.validateChildAge1();
this.validateChildAge2();
this.validateChildAge3();
this.validateChildAge4();
this.validateChildAge5();
this.validateChildAge6();
this.validateChildAge7();
this.validateChildAge8();
},

Одна из многих функций проверки:

//Adult age validation
validateAdultAge0: function() {
    $('button[type="submit"]').on('click', function() {
var inputVal = parseInt( $("input[name='adultAges[0]']").val());
if (inputVal < 18) {
    $("input[name='adultAges[0]']").css("border-color","red");
$("div#under18").addClass('show').removeClass('hidden');
}
        });
},

person smokerockspunchcops    schedule 26.01.2015    source источник
comment
Я не вижу, где вы используете свои функции проверки, но вам, вероятно, потребуется вернуть из них true или false, если вызывающему методу необходимо знать, прошла ли проверка или нет. Покажите нам код, который вызывает методы проверки.   -  person ps2goat    schedule 27.01.2015
comment
И где проблема?   -  person Robert Rossmann    schedule 27.01.2015
comment
Отлично, вы показали свои намерения и некоторый код, но не указали, что не так, и не задали никаких вопросов.   -  person charlietfl    schedule 27.01.2015
comment
Я пытаюсь выяснить, что мне нужно включить в //Проверку возраста для взрослых и var handleFormSubmit, чтобы остановить saveForm($('#quotecriteria_form')); и выполнить AjaxSubmit (formData, URL); от происходящего   -  person smokerockspunchcops    schedule 27.01.2015
comment
обновите пост с вашими проблемами, чтобы он был виден всем   -  person charlietfl    schedule 27.01.2015
comment
Каждая ли функция проверки выглядит как validateAdultAge0 ? Если да, не повторяйтесь!   -  person localghost    schedule 27.01.2015
comment
Выполнено. Надеюсь, я имею смысл.   -  person smokerockspunchcops    schedule 27.01.2015
comment
@localghost да, validateAdultAge0-3 и validateChildAge0-8 выглядят очень похоже, но я новичок в jquery...   -  person smokerockspunchcops    schedule 27.01.2015
comment
Вам стоит изучить что-то вроде плагина проверки jQuery или WebShim   -  person Tomanow    schedule 27.01.2015
comment
@Igor Игорь, да, это правильно, мне нужно знать, что добавить в функцию, чтобы остановить отправку формы сейчас.   -  person smokerockspunchcops    schedule 27.01.2015
comment
@Tomanow не может использовать плагин проверки в этом проекте.   -  person smokerockspunchcops    schedule 27.01.2015
comment
если честно, у вас нет ничего, чтобы отслеживать общее состояние проверки формы с помощью всех этих различных функций.   -  person charlietfl    schedule 27.01.2015
comment
@charlietfl как мне создать что-то, что сделало?   -  person smokerockspunchcops    schedule 27.01.2015
comment
Не видя всего кода и не зная ваших возможностей, вы бы предложили поместить все в один обработчик отправки, который может отслеживать ошибки либо в виде массива, либо просто в виде логического значения. Затем, когда дойдете до конца всех элементов, верните false, если есть ошибки   -  person charlietfl    schedule 27.01.2015


Ответы (1)


Определите логический массив вне области действия всех функций с индексом для каждого входного элемента:

var valid = [false,false,false...];

Установите для исходного значения значение false, если пустой ввод следует считать недействительным, или значение true, если поле является необязательным. В каждом из ваших обработчиков проверки (например, validateAdultAge0) соответствующим образом измените соответствующий флаг. Например, если вы решили сопоставить действительность age0 с 0-м индексом, тогда:

if (inputVal < 18) {
    $("input[name='adultAges[0]']").css("border-color","red");
    $("div#under18").addClass('show').removeClass('hidden');
    valid[0] = false;
}else{
    valid[0] = true;
}

Как указал кто-то в комментариях, если логика одинакова для каждой из этих функций, вы должны использовать аргумент для указания целевого ввода, а не создавать совершенно новую функцию, но я не буду вдаваться в это здесь.

В handleFormSubmit вам просто нужно проверить, установлены ли для всех флагов в действительном массиве значение true, если какой-либо из них является ложным, вы можете вернуть:

for(var i=0;i<valid.length;i++){
    if(!valid[i]){
        return;
    }
}
person ReallyMadeMeThink    schedule 27.01.2015