等待表单提交时返回循环

时间:2014-08-01 07:05:19

标签: javascript jquery html

我有以下代码,表单需要在提交表单之前进行验证。 但问题是,表单会继续提交而不进行验证。

<form action='#' method='post' onsubmit='return validate();'>

function validate()
{
    $('form').find(':input:not(:submit,:hidden), select, textarea').each(function(e)
    {       
        $(this).removeClass('redBox');
        var rq = $(this).attr('requiredz');

        if(rq != undefined)
        {
            if($(this).val().trim() == '')
            {
                $(this).addClass('redBox');
                $("#errorMsg").html('Red boxes cannont be left empty!');
                return false;
            }               
        }       
    });
}); 

如何处理循环的返回? 一旦遇到在循环中返回false,就不要提交表单。

3 个答案:

答案 0 :(得分:2)

试试这个:

function validate()
{
    var passes = true;
    $('form').find(':input:not(:submit,:hidden), select, textarea').each(function(e)
    {       
        $(this).removeClass('redBox');
        var rq = $(this).attr('requiredz');

        if(rq != undefined)
        {
            if($(this).val().trim() == '')
            {
                $(this).addClass('redBox');
                $("#errorMsg").html('Red boxes cannont be left empty!');
                passes = false;
            }               
        }       
    });

    return passes;
}); 

答案 1 :(得分:0)

不要使用return。

$('#my-form').on('submit', function(event){
    if (validate() === false) {
        event.preventDefault(); // like return false;
    }
});

有关详细信息,请参阅jQuery submit文档。

答案 2 :(得分:0)

每个函数都有自己的返回值,默认返回值是undefined值。您应该在each循环后检查无效元素的长度并返回正确的值,因为您使用的是jQuery我建议:

$('form').on('submit', function (event) 
{
    var $invalid = $(this)
                    .find(':input:not(:submit,:hidden), select, textarea')
                    .removeClass('redBox')
                    .addClass(function () {
                       return this.getAttribute('requiredz') 
                              && $.trim(this.value) === ''
                              ? 'redBox' 
                              : null;
                    }).filter('.redBox');

    if ($invalid.length) 
    {
        $("#errorMsg").html('Red boxes cannont be left empty!');
        return false;
    }

});