jQuery打破.each

Posted

技术标签:

【中文标题】jQuery打破.each【英文标题】:jquery break .each 【发布时间】:2012-10-24 13:34:33 【问题描述】:

我有一个表单,他包含百分比数据的文本字段,单击提交时我想在每个表单上使用类选择器验证所有百分比,并检查无效百分比中断每个焦点字段,但“返回 false”不要打破这个

我的代码:

$('#enviarquestionario').click(function(event)
    event.preventDefault();

        $('input.percent').each(function()
            valor = $(this).val();
            if(isNaN(valor) || valor > 100 || valor < 0 )
                alert('Preencha corretamente os campos de porcentagem com valores entre 0 e 100');
                $(this).focus();
                return false;
            else
                $('#questionarioparticipacao').submit();
            
        );

    return false;
);

表单正在以某种方式被提交。

 #enviarquestionario is a ancor

【问题讨论】:

如果表单提交,你的 if 语句失败。此外,在每个循环中提交表单似乎不是一个好主意? 使用上面的代码,您的 if 语句失败是您提交表单的唯一方式。 表格将在第一个有效百分比数字上提交。最简单的方法是在“每个”循环之前创建一个标志,并在循环内设置。使用此标志循环后,您可以决定是否提交。 【参考方案1】:

试试这个:

$('#enviarquestionario').click(function(event)
    event.preventDefault();
    var isError = false;

    $('input.percent').each(function()
        valor = $(this).val();
        if(isNaN(valor) || valor > 100 || valor < 0 )
            alert('Preencha corretamente os campos de porcentagem com valores entre 0 e 100');
            $(this).focus();
            isError = true;
            return false;
        
    );

    if(!isError) $('#questionarioparticipacao').submit(); 

    return false;
);

【讨论】:

【参考方案2】:

考虑更改您的代码以使用设置为 false 的有效标志,即使一次验证失败:

$('#enviarquestionario').click(function(event)

        event.preventDefault();

        var valid = true; // initially set to true

        $('input.percent').each(function()
            valor = $(this).val();
            if(isNaN(valor) || valor > 100 || valor < 0 )
                alert('Preencha corretamente os campos de porcentagem com valores entre 0 e 100');
                $(this).focus();
                valid = false; // set to false even if one fails
                return false;
            
        );

        // submit only if all validations pass
        if(valid === true) $('#questionarioparticipacao').submit();

        return false;
);

【讨论】:

【参考方案3】:

只是我的版本。这实际上会像您想要的那样破坏 .each。

$('#enviarquestionario').click(function(event)
    event.preventDefault();
        var breakerbreaker = false;
        $('input.percent').each(function()
            if(breakerbreaker) return false; 

            valor = $(this).val();
            if(isNaN(valor) || valor > 100 || valor < 0 )
                alert('Preencha corretamente os campos de porcentagem com valores entre 0 e 100');
                $(this).focus();
                breakerbreaker = true;
        );

    if(!breakerbreaker) $('#questionarioparticipacao').submit();     
    return false;
);

【讨论】:

以上是关于jQuery打破.each的主要内容,如果未能解决你的问题,请参考以下文章

Jquery:如何打破 each() 和它在里面的函数?

jquery-ui-rails 打破 rails 测试

尝试使用 jquery hasClass 来打破悬停功能

jQuery Mobile 打破了 Phonegap deviceready 事件

jquery 3.0.0 升级打破了 html 表格功能

ASP 更新面板打破了 jQuery 星级评分系统