Моя форма не может быть отправлена, даже если в функции submithandler возвращено «true», что не так - PullRequest
0 голосов
/ 01 декабря 2009

Это код jQuery:

$(document).ready(function(){ 
    $("#digitalchange").validate({ 
        rules: {
            addbalance: {
                digits:true,
                min:20,
                max:1000
            },
            addquota: {
                digits:true,
                min:5,
                max:1000
            },
            reducequota: {
                digits:true,
                min:1,
                max:50
            }
        },
        submitHandler: function() {
            var var1=$('#addquota').val();
            var var2=$('#reducequota').val();
            if(var1!='' && var2!='') {
                alert('You can only add shortall or reduce shortall.');
                return false;
            }
            return true;
        },
        messages: {
        }
    });
});

Проблема в том, что форма цифрового обмена не будет отправлена ​​независимо от того, как. Когда я комментирую

submitHandler: function(){
    var var1=$('#addquota').val();
    var var2=$('#reducequota').val();
    if(var1!='' && var2!='') {
        alert('You can only add shortall or reduce shortall.');
        return false;
    }
    return true;
},

тогда форма может быть отправлена. Что не так?

Я изменил return true; на $("#digitalchange").submit();, форму можно отправить. Тем не менее, существует значительная (или очевидная) задержка перед отправкой, когда я нажимаю кнопку «отправить», что не так? Как избавиться от задержки?

submitHandler: function(form) {
    var var1=$('#addquota').val();
    var var2=$('#reducequota').val();
    if(var1!='' && var2!='') {
        alert('You can only add shortall or reduce shortall.');
        return false;
    }
    form.submit();
},

не работает.

1 Ответ

4 голосов
/ 01 декабря 2009

Попробуйте заменить submitHandler на это.

submitHandler: function(form) {
    var var1=$('#addquota').val();
    var var2=$('#reducequota').val();
    if(var1!='' && var2!='') {
        alert('You can only add shortall or reduce shortall.');
        return false;
    }
    form.submit();
},

Кроме того, вы должны прочитать опцию submitHandler и проверку : слишком много рекурсии часть в документации по валидации.

В документации говорится

submitHandler

Обратный вызов для обработки фактического отправить, когда форма действительна. Получает форма как единственный аргумент. Заменяет отправку по умолчанию

Так что возвращение true ничего не сделает AFAIK. Как вы также можете решить не подчиняться или делать что-то совершенно другое. Примеры также ясно показывают, что использование элемента формы (переданного в качестве параметра в функцию submitHandler) - правильный путь.

Используйте submitHandler для обработки чего-либо а затем с помощью отправки по умолчанию. Обратите внимание, что «форма» относится к DOM элемент, таким образом, проверка не снова срабатывает.

$(".selector").validate({
    submitHandler: function(form) {
        // do other stuff for a valid form
        form.submit();
    }
})

В то время как часть Too much recursion в документации гласит, что использование $("#digitalchange").submit(); (что равно $(form).submit() в примерах документации) вызовет рекурсию, так как она снова и снова запускает проверку (при этом заметная задержка).

...