验证函数,并循环遍历对象以获得更好的性能

Validation function, and looping through objects to find better performance

本文关键字:更好 性能 对象 函数 循环 遍历 验证      更新时间:2023-09-26

我有一个验证函数,到目前为止,下面的代码做了我想要的,传入所有的$('.required')类,然后循环遍历它们以检查它们的每个值。如果它们都不等于空字符串,则在所有字段至少有一个字符时启用next按钮。

我只是好奇是否有更好的方法来完成同样的任务,或者如果有人有任何速度性能增强也会很棒,谢谢!

validate : function (requiredArray) {
            var valueObj = {};
            for(var i = 0; i < requiredArray.length; i++) {
                valueObj[i] = 'input#'+requiredArray[i].id;
                $(valueObj[i]).on("keyup mouseup", function (e) {
                    for (var j = 0; j < Object.keys(valueObj).length; j++) {
                        if($(valueObj[j]).val() !== '') {
                            $('.btn-success.nextButton').removeClass('disabled');
                        } else {
                            $('.btn-success.nextButton').addClass('disabled');
                            return;
                        }
                    }
                });
            }
        }

如果你使用一个通用的类required作为你所有的输入,那么你可以试试这个:

validate: function() {
  var $inputs = $('input.required'),
      $button = $('.btn-success.nextButton'),
      hasEmpty = $inputs.filter(function(){ return !this.value; }).length;
  $inputs.on('keyup mouseup', function() {
    if (hasEmpty) return false;
    $button.removeClass('disabled');
  });
}

我不确定你的结构是什么,但你应该把事件从验证逻辑中分离出来,例如:

var $inputs = $('input.required'),
    $button = $('.btn-success.nextButton');
function validate() {   
  return $inputs.filter(function(){ return !this.value; }).length;  
}    
$inputs.on('keyup mouseup', function() {   
  if (!validate()) return false;   
  $button.removeClass('disabled');  
});

Id应该少用,类更方便。

我是这样让它工作的:

$inputs.on('keyup mouseup', function() {  
    if (CMS.validate()) {
        $('.btn-success.nextButton').addClass('disabled');  
        return false; 
    }   
    $('.btn-success.nextButton').removeClass('disabled');  
        });