Форма отправлена ​​даже после того, как функция onsubmit возвращает false - PullRequest
0 голосов
/ 07 марта 2012

Html

<form action="/users/add" onsubmit="return test();" id="UserForm" method="post" accept-charset="utf-8">
    <input type="text" maxlength="255" value="" id="UserName" class="form-error"  >
</form

Javascript

function test() {
    var inputs = $('input:not([inputname])');

    jQuery.each(inputs, function() {
    if (this.value == '') {
        $(this).next().removeClass('displayNone');
        return false;
    }
    });

}

Если я выберу одно входное значение, как показано ниже, оно прекрасно работает для меня. Это позволит избежать отправки формы.

function test() {
    var value = $('#UserName').val();
    if (value == '') {
    $('#UserName').next().removeClass('displayNone');
    return false;
    }
}

Как избежать отправки формы при использовании функции jQuery.each?

Ответы [ 2 ]

0 голосов
/ 07 марта 2012

Я думаю, вы должны использовать each() вместо $.each(), поскольку inputs это коллекция jquery, а не обычный массив.
Чтобы предотвратить отправку формы, вы можете сделать это вместо встроенного кода:

$('form').submit(function(e){
    if (!test()) {
        e.preventDefault(); // If test fails don't submit
    }
});
0 голосов
/ 07 марта 2012

В вашем первом примере test() не возвращает false.

В функции test() нет оператора возврата.

Единственный оператор возврата находится в анонимной функции, переданной each.

Предположительно, вы должны делать что-то вроде этого:

function test() {
    var inputs = $('input:not([inputname])');

    var return_value = true;

    jQuery.each(inputs, function() {
        if (this.value == '') {
            $(this).next().removeClass('displayNone');
            return_value = false;
        }
    });

    return return_Value;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...