【问题标题】:jquery $.each() and array validationjquery $.each() 和数组验证
【发布时间】:2013-08-02 18:44:24
【问题描述】:

我有一个非常简单的代码,但由于某种原因,最后一部分无法正常工作,Y 有一个包含一些数据的数组

var dArray = {
    'var1': $("#var1").val(),
    'var2': $("#var2").val(),
    'var3': $("#var3").val(),
    'var4': $("#var4").val(),
    'var5': $("#var5").val(),
    'var6': $("#var6").val(),
    'var7': $("#var7").val(),
    'var8': $("#var8").val()
};

为了确保每个输入都有数据,我尝试制作一个验证这一点的函数(同样是一个非常简单的函数)

function valDataArray(nomArray) {
    $.each(nomArray, function (index, value) {
        if (value == "") {
            alert("must enter: " + index);
            return false;
        } else {
            return true;
        }
    });
}

一般的想法是最后一个函数会给我一个真或假,所以我可以继续我的代码,但由于某种原因,它在每种情况下都给我“未定义”。

【问题讨论】:

  • 你不是return来自valDataArray的任何东西。请注意,$.each 返回的是它迭代的数组,而不是回调的结果。
  • 你说得对,我只是在此处的帮助下修复代码,谢谢 :)

标签: javascript jquery arrays if-statement each


【解决方案1】:

只需添加一些标志来显示验证是否成功

 function valDataArray(nomArray) {
    var valid = true;
    $.each(nomArray, function (index, value) {
        if (value == "") {
            valid = false;
            alert("must enter: " + index);
            return false;
        } else {
            return true;
        }
    });
    return valid;
}

此外,从简单的角度来看,您可以简化代码添加属性:

首先为每个输入添加属性data-required='true'

 <input type='text' id='var1' data-required='true' />

然后得到那些需要的

 function valDataArray(nomArray) {
    var valid = true;
    $('[data-required]').each(function (index, value) {
        if (value == "") {
            valid = false;
            alert("must enter: " + index);
            return false;
        } else {
            return true;
        }
    });
    return valid;
}

【讨论】:

  • 您应该从循环内部删除return false; 和return true;。此外,else 不是必需的。
  • @ataravati 回答了你的问题,如果在第一个无效字段上失败是可以的,保留它是有效的。
【解决方案2】:

在 $.each 循环的回调中返回 false 不会退出外部函数,它只会结束循环。

此外,您不希望在 else 情况下退出函数,因为这会使循环始终在“数组”中的第一项之后结束,并且不再验证任何项。

将要从函数返回的值放入循环内的变量中,并在循环后返回:

function valDataArray(nomArray){
  var ok = true;
  $.each(nomArray, function(index, value){
    if( value == ""){
        alert("must enter: " + index);
        ok = false;
        return false; // exit from loop
    }   
  });
  return ok;
}

【讨论】:

  • 你是对的,谢谢你,我能够修复代码:)
【解决方案3】:

将您的代码更改为:

function valDataArray(nomArray){
    var isValid = true;

    $.each(nomArray, function(index, value){
        if( value == ""){
            alert("must enter: " + index);
            isValid = false;
        }

    });

    return isValid;
}

【讨论】:

  • 这很有趣。和 6 秒的差异
  • 我知道。您应该从循环内部删除return false; 和return true;。此外,else 不是必需的。
  • 保持 return false 是有意义的,因为它会使整个集合无效并且您不需要检查剩余的字段。
  • 您完全正确,非常感谢您的帮助,修复了代码
猜你喜欢
  • 2013-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-29
  • 2017-11-18
  • 2011-04-09
相关资源
最近更新 更多