2013-10-22 47 views
0

我是新来的JavaScript和jquery,想知道如果有人可以让我在为什么这不工作正常。关联数组设置不正确

我有一个下拉框,用户从中选择一个值,然后选择“进程”。处理时,下拉列表的值以及文本框都存储在一个数组中。我希望用户能够基本上将相同的下拉选择和文本框数据再次存储在数组中,但是现在又以新的值对存储。

首先商店将是 TestArray [0] [0] = “文本框的值”

如果 “已处理” 再次,这将是 TestArray [1] [0] = “文本框的值”

这样我可以稍后解析并计算用户“处理”下拉选择的次数;

var oneClickReport = $("#reportName").val(); 
    if(oneClickReport == "Sample Report One"){ 
     var arrayOneCount = reportOneArray.length; 
     var totalHouseholds = 0; 
      $("#reportChecks span:visible").each(function(){    
       if($(this).find(':checkbox').prop('checked')){ 
        var HHName = $(this).text(); 
        reportOneArray.push(HHName); 
        arrayTest[arrayOneCount][totalHouseholds] = HHName; 
       } 
      totalHouseholds += 1; 
      }); 
      for(i = 0; i < arrayOneCount; i+=1){ 
       alert(arrayTest[0][i]); 
      } 
    } 

但是当试图第二次“处理”时,我收到错误;

SCRIPT5007: Unable to set property '0' of undefined or null reference 

on line;

arrayTest[arrayOneCount][totalHouseholds] = HHName; 

回答

0

您的问题var arrayOneCount = reportOneArray.length;和你不改变这个值

+0

时,每次调用该函数时该值都会递增。它会重新计算添加到阵列的新值并以此方式进行更新 –

1

需要初始化您的数组。我不知道你想做什么,但你需要这样的

var arrayTest = [] 

一个数组,你需要初始化象

arrayTest[1] = [] 

后续值。然后,你可以访问阵列

arrayTest[1][0] = [] 

我做了一个例子,你

var oneClickReport = $("#reportName").val(); 
var arrayTest = [] # You may need to put this elsewhere 
if(oneClickReport == "Sample Report One"){ 
    var arrayOneCount = reportOneArray.length; 
    var totalHouseholds = 0; 
     $("#reportChecks span:visible").each(function(){    
      if($(this).find(':checkbox').prop('checked')){ 
       var HHName = $(this).text(); 
       reportOneArray.push(HHName); 

       if(!arrayTest[arrayOneCount]){ arrayTest[arrayOneCount] = []; } 

       arrayTest[arrayOneCount][totalHouseholds] = HHName; 
      } 
     totalHouseholds += 1; 
     }); 
     for(i = 0; i < arrayOneCount; i+=1){ 
      alert(arrayTest[0][i]); 
     } 
} 
+0

非常感谢您的回答,我想我已经差不多了。我碰到的一件事我绝对没有想到,如果用户最初选择多于1个复选框添加,arrayOneCount值不会是1,但是选择了很多。有没有办法让我检查一下arrayTest [0]或者arrayTest [1]等是否已经被初始化和填充?我真的只想要如果用户首次处理“报告一”它存储在arrayTest [0]为所有选定的复选框,然后如果他们再次处理arrayTest [1]等等。再次感谢 –

+0

你可以实现长度属性的阵列。 如果(ArrayTest中[arrayOneCount]。长度> 0){ #There东西在ArrayTest中[arrayOneCount] } 否则{ #There没什么在ArrayTest中[arrayOneCount] } – Nico