2012-10-25 48 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' 
})