2013-10-22 80 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