Как не отправить форму, если проверка неверна - PullRequest
5 голосов
/ 20 марта 2009

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

$('#form').submit(function(){
    validateForm1();
    validateForm(document.forms['dpart2']);
    validateForm(document.forms['dpart3']);                     
}); 

Ответы [ 5 ]

7 голосов
/ 20 марта 2009
$('#form').submit(function(){
    return (validateForm1() &&
            validateForm(document.forms['dpart2']) &&
            validateForm(document.forms['dpart3']))
});

По сути, вы возвращаете false в функции обработчика событий.

6 голосов
/ 20 марта 2009

Если функция возвращает false, форма не будет отправлена.

$('#form').submit(function(){
    return  validateForm1() 
            && validateForm(document.forms['dpart2']) 
            && validateForm(document.forms['dpart3']);                                         
              }
});
4 голосов
/ 21 марта 2009

Хорошо, некоторые другие решения будут иметь ленивый сбой ... вы, вероятно, хотите, чтобы все проверки выполнялись, чтобы отображались все ошибки. Предполагается, что ваши методы проверки вернут false, если они потерпят неудачу.

$("#myform").submit(function() {

    var ret = true;
    ret = validateForm1() && ret;
    ret = validateForm(document.forms['dpart2']) && ret
    ret = validateForm(document.forms['dpart3'])) && ret
    return ret;

});

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

3 голосов
/ 20 марта 2009

Мысль, которая возникает автоматически: даже если вы внедрили тщательную проверку на стороне клиента, будьте готовы получить на сервере любые недопустимые данные запроса, которые вы можете себе представить.

Проверка на стороне клиента никогда не удерживает вас от проверки на стороне сервера. Это просто бонус в удобстве использования.

3 голосов
/ 20 марта 2009

Если validateForm (...) и validateForm1 () возвращают логическое значение (true означает, что ошибки проверки не произошло), то вы пытаетесь это сделать:

$('#form').submit(function(){
    if (!validateForm1() || !validateForm(document.forms['dpart2']) || !validateForm(document.forms['dpart3'])) {
        return false;
    }
});
...