Javascript:如何正确检查数组是否为空

时间:2016-08-08 17:29:49

标签: javascript arrays

我正在尝试验证我的数组输入字段,如果它是空的,不幸的是我的代码似乎不起作用我不知道为什么,以及验证这个的最佳方法是什么。

<input type="text" name="sub_crit_text[]" class="sub_crit_text" value="text1">
<input type="text" name="sub_crit_text[]" class="sub_crit_text" value="text2">
<input type="text" name="sub_crit_text[]" class="sub_crit_text" value="text3">
<input type="text" name="sub_crit_text[]" class="sub_crit_text" value="text4">

我的js

var sub_crit_arr = [];
$('.sub_crit_text').each(function(k , v){
    sub_crit_arr[k] = $(v).val();
});

if(sub_crit_arr.length > 0){

}else{
    alert('Sub criteria cannot be empty');
    return false;
}

4 个答案:

答案 0 :(得分:2)

空字符串数组将为您提供大于0的长度:

Syntax error in INSERT INTO statement

首先尝试with dmInfo do begin qryInfo.SQL.Clear; qryInfo.SQL.Add('INSERT INTO tblGymnast'); qryInfo.SQL.Add('(GymnastID, Surname, Name, NickName, FamilyID, PosCode, CellNo, SAGFID, Photo, StartDate, BirthDate, Gender, Race, Category, IDNum, UpgrdTo, SchoolID, LevelID, TransID, DokterID, MedNum, MedID, Language)'); qryInfo.SQL.Add(' VALUES(:GymnastID, :Surname, :Name, :NickName, :FamilyID, :PosCode, :CellNo, :SAGFID, :Photo, :StartDate, :BirthDate, :Gender, :Race, :Category, :IDNum, :UpgrdTo, :SchoolID, :LevelID, :TransID, :DokterID, :MedNum, :MedID, :Language)'); qryInfo.Parameters.ParamByName('GymnastID').Value:= 'a'; qryInfo.Parameters.ParamByName('Surname').Value:= 'a'; qryInfo.Parameters.ParamByName('Name').Value:= 'a'; qryInfo.Parameters.ParamByName('NickName').Value:= 'a'; qryInfo.Parameters.ParamByName('FamilyID').Value:= 'a'; qryInfo.Parameters.ParamByName('PosCode').Value:= 'a'; qryInfo.Parameters.ParamByName('CellNo').Value:= 'a'; qryInfo.Parameters.ParamByName('SAGFID').Value:= 'a'; qryInfo.Parameters.ParamByName('Photo').Value:= 'a'; qryInfo.Parameters.ParamByName('StartDate').Value:= 'a'; qryInfo.Parameters.ParamByName('BirthDate').Value:= 'a'; qryInfo.Parameters.ParamByName('Gender').Value:= 'a'; qryInfo.Parameters.ParamByName('Language').Value:= 'a'; //This gives the error qryInfo.Parameters.ParamByName('Race').Value:= 'a'; qryInfo.Parameters.ParamByName('Category').Value:= 'a'; qryInfo.Parameters.ParamByName('IDNum').Value:= 'a'; qryInfo.Parameters.ParamByName('UpgrdTo').Value:= 'a'; qryInfo.Parameters.ParamByName('SchoolID').Value:= 'a'; qryInfo.Parameters.ParamByName('LevelID').Value:= 'a'; qryInfo.Parameters.ParamByName('TransID').Value:= 'a'; qryInfo.Parameters.ParamByName('DokterID').Value:= 'a'; qryInfo.Parameters.ParamByName('MedNum').Value:= 'a'; qryInfo.Parameters.ParamByName('MedID').Value:= 'a'; qryInfo.ExecSQL; end; 结果:

var sub_crit_arr = ['','','','']

答案 1 :(得分:1)

Array.filter将为您提供元素而不是布尔值。如果您只想验证并且无法使用无效条目,则可以使用array.somearray.every

Array.every

&#13;
&#13;
$("#btnValidate").on("click", function(){
  var valid = [].every.call($(".sub_crit_text"), function(el){
    return el.value.trim().length > 0
  });
  console.log(valid)
})
&#13;
sub_crit_text
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<input type="text" name="sub_crit_text[]" class="sub_crit_text" value="text1">
<input type="text" name="sub_crit_text[]" class="sub_crit_text" value="text2">
<input type="text" name="sub_crit_text[]" class="sub_crit_text" value="text3">
<input type="text" name="sub_crit_text[]" class="sub_crit_text" value="text4">
<button id="btnValidate">Validate</button>
&#13;
&#13;
&#13;

Array.some

&#13;
&#13;
$("#btnValidate").on("click", function(){
  var inValid = [].some.call($(".sub_crit_text"), function(el){
    return el.value.trim().length === 0
  });
  console.log(inValid);
})
&#13;
sub_crit_text
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<input type="text" name="sub_crit_text[]" class="sub_crit_text" value="text1">
<input type="text" name="sub_crit_text[]" class="sub_crit_text" value="text2">
<input type="text" name="sub_crit_text[]" class="sub_crit_text" value="text3">
<input type="text" name="sub_crit_text[]" class="sub_crit_text" value="text4">
<button id="btnValidate">Validate</button>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

如果您只是想检查其中一个输入是否为空:

<强> JS

var valid = false ;

$('.sub_crit_text').each(function(k , v){
  if ( $(v).val() ) valid = true ;
});

if (!valid)
  alert("Sub criteria cannot be empty");

请注意,所有输入最初都有值。所以也许这就是你的代码不起作用的原因。

答案 3 :(得分:-1)

您可以单独使用filter

if($('.sub_crit_text').filter(function(){ return !this.value.trim(); }).length){
    alert('Sub criteria cannot be empty');
    return false;
}

不需要引入另一个数组,也可以减少一次迭代。