【问题标题】:jQuery Loop with Validation带有验证的 jQuery 循环
【发布时间】:2014-08-13 18:10:32
【问题描述】:

我有一个 jQuery 循环,它正在查看页面上的单选按钮并确保它们被选中。

该功能正在运行,但出现故障,我知道原因;只是不知道如何解决它。

// Validate the proficiencies
var names = {};
$('.radio').filter(':radio').each(function(){
    var name = $(this).attr('name');
    if( undefined === names[name] ){
        names[name] = false;
    }
    if( $(this).is(':checked') ){
        names[name] = true;
    }
});

$.each(names, function(name, val){
    if( !val ){
        theTab = 'proficienciesTab';
        $('.nav-tabs a[href="#' + theTab + '"]').tab('show');
        $('[name="'+name+'"]').closest('tr').addClass('danger');
        $('[name=error]').empty().append('<div class="alert alert-danger" role="alert"><i class="fa fa-ban"></i>&nbsp;&nbsp;Please complete all proficiencies.</div>');
        hasError = true;
    }else{
        $('[name="'+name+'"]').closest('tr').removeClass('danger');
        hasError = false;
    }
});

if(!hasError){
    //process form
}

问题出在$.each 循环中。如果有 10 个单选按钮并且都未选中,则它工作正常,因为它们都返回 false。

但是,如果我只检查最后一个单选按钮,它将对所有单选按钮返回 false,然后在最后一个返回 true,因此最终的 hasError 值将为 true,从而执行下一段代码并处理表格。

如果我只是在return false 里面if( !val ){ } 它不会将这些类添加到缺少的类中,它只会将它添加到它发现为假的第一个类中。

我该如何解决这个问题?

【问题讨论】:

  • 如果你能包含一个 JSFiddle 来展示这个问题,那就太棒了

标签: javascript jquery


【解决方案1】:

在循环开始之前设置hasError = false。 然后只在发生错误时设置hasError = true

最后一个好的永远不会覆盖错误的值。

hasError = false;
$.each(names, function(name, val){
        if( !val ){
            theTab = 'proficienciesTab';
            $('.nav-tabs a[href="#' + theTab + '"]').tab('show');
            $('[name="'+name+'"]').closest('tr').addClass('danger');
            $('[name=error]').empty().append('<div class="alert alert-danger" role="alert"><i class="fa fa-ban"></i>&nbsp;&nbsp;Please complete all proficiencies.</div>');
            hasError = true;
        }else{
            $('[name="'+name+'"]').closest('tr').removeClass('danger');
        }
    });

【讨论】:

  • 谢谢 - 我已经默认设置为 false,只需要删除 hasError=false line
猜你喜欢
  • 2022-01-18
  • 2014-03-01
  • 2013-07-21
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
  • 2011-09-02
  • 2015-07-07
  • 1970-01-01
相关资源
最近更新 更多