$ .each函数替换为for循环

时间:2018-08-02 17:57:50

标签: javascript jquery

validateScaledIntegerNumberGridFields: function(frm) {
            var fields = $('.scaledInteger', frm);
            var result = true;
            for(var i=0; i<fields.length; i++) {
                var scale = $(fields[i]).data("scale");
                var separator = $(fields[i]).data("separator");
                var decimalOnly = new RegExp('^[0-9]\\d*                                 
                              (\\'+separator+'\\d{'+scale+','+scale+'})?$');
          if(fields[i].value != "" && !(fields[i].value).match(decimalOnly)) {
                    $(fields[i]).addClass('form-attr-error');
                    result = false;
          }
          else {
               $(fields[i]).removeClass('form-attr-error');
          }
       }
            return result;
        }

我在这里需要帮助以将for循环转换为$ .each函数,并在转换为.each之后如何获得“ i”值。请帮助我。

1 个答案:

答案 0 :(得分:0)

除了访问i数组以外,您几乎不需要i,因为我看不到fields的任何有用目的。

每个与选择器匹配的element都可以使用each()进行迭代。这里this引用被迭代的当前元素。您还可以从回调函数的参数中获取i的值。

function validateScaledIntegerNumberGridFields(frm) {            
            var result = true;
            $('.scaledInteger', frm).each(function(i){
                var scale = $(this).data("scale");
                var separator = $(this).data("separator");
                var decimalOnly = new RegExp('^[0-9]\\d*(\\'+separator+'\\d{'+scale+','+scale+'})?$');
          if(this.value != "" && !(this.value).match(decimalOnly)) {
                    $(this).addClass('form-attr-error');
                    result = false;
          }
          else {
               $(this).removeClass('form-attr-error');
          }
       });       
            return result;
        }

validateScaledIntegerNumberGridFields()
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

注意:$ .each()和each()不同。

each()参考:https://api.jquery.com/each/

$。each()参考:https://api.jquery.com/jquery.each/