0

我有一个非常简单的代码,但由于某种原因,最后一部分无法正常工作,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;
        }
    });
}

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

4

3 回答 3

3

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

 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;
}
于 2013-08-01T17:42:31.150 回答
1

将您的代码更改为:

function valDataArray(nomArray){
    var isValid = true;

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

    });

    return isValid;
}
于 2013-08-01T17:42:24.337 回答
1

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

此外,您不想在这种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;
}
于 2013-08-01T17:44:54.380 回答