2012-10-25 52 views
3

這可能很容易,但我現在無法弄清楚如何解決它。每次點擊提交按鈕時,下面的函數檢查輸入字段1(名稱),如果不是空值,則將該值添加到關聯數組中,並繼續描述。向關聯數組添加新元素,每次點擊

我需要的是一個新的1級元素添加到每個點擊陣列,應該保持這些價值,使之經過三次點擊看起來是這樣的:

Click 1: 
    listObject[0]['listObjectName'] = 'Name 1'; 
    listObject[0]['listObjectDesc'] = 'Desc 1'; 

Click 2: 
    listObject[1]['listObjectName'] = 'Name 2'; 
    listObject[1]['listObjectDesc'] = 'Desc 2'; 

Click 3: 
    listObject[2]['listObjectName'] = 'Name 3'; 
    listObject[2]['listObjectDesc'] = 'Desc 3'; 

功能:

$('#addListObjectSubmit').click(function (e) { 

      var listObjectName = $('#m_newListObject').val(); 

      if((listObjectName == null) || (listObjectName == '')) { 
       return false; 
      } 
      else { 
       listObjects['listObjectName'] = listObjectName; 

       var listObjectDesc = $('#m_newListObjectDesc').val(); 

       if ((listObjectDesc == null) || (listObjectDesc == '')) { 
        listObjects['listObjectDesc'] = null; 
       } 
       else { 
        listObjects['listObjectDesc'] = listObjectDesc; 
       } 
      } 

      e.preventdefault(); 
     }); 

那麼,處理這個問題的最好方法是什麼?

回答

4

如果您忘記關聯數組,它會幫助您一點。它們只在理論上存在於Javascript中。事實上,一切都是一個對象,甚至是數組。但從數據存儲的角度來看,您可以使用一個簡單的array,它只能以數字形式編制索引,或者您可以使用object作爲數據映射。

下面的示例創建的陣列(注意的new Array()更緊湊[]代替)和pushes的映射(以{}創建)到其中:

var listObjects = []; 
... 
var newElem = { 
    'listObjectName' : 'Name 1', 
    'listObjectDesc' : 'Desc 1' 
}; 
listObjects.push(newElem); 

之後,可以用listObjects[0]訪問此元件,如果它是數組中的第一個元素。

如果要訪問它的屬性,你可以使用其中的一個:

listObjects[0].listObjectName 
listObjects[0]['listObjectName'] 

所以你可以看到,對象打交道時,你可以使用.符號以及支架符號 - 他們是等價的,但後一種形式使它看起來像是一個「關聯數組」(對於來自PHP的人來說更是如此)。

+0

我已經到PHP太多近來,幾乎忘了JS的對象性質。謝謝你的回憶:) – holyredbeard

+0

@holyredbeard只是擴大了我的答案。我確定你實際上來自PHP背景;)。 – kapa

+0

;)非常感謝! – holyredbeard

2

..你的意思是,你想添加一個「關聯數組」(它們被稱爲「對象」,在JavaScript中,btw)到每次點擊時的數組?

的東西添加到陣列的方法是push()

listObject.push({ 
    'listObjectName': 'Name X', 
    'listObjectDesc': 'Description X' 
})