2012-03-28 54 views
0

我创建了一个javavascript对象,我打电话给rulesObject。这个想法是一个javascript对象,它包含我需要检查的所有规则,以启用/禁用从脚本开始时从mysql数据库动态生成的其他复选框。现在,我只是测试它与我知道创建我要找的场景两个规则,所以这里就是我的目标看起来像此刻:访问一个动态命名的对象属性

rulesObject = { 
     chk533570 : ["533577", "503671", "503667", "604028", "503661"], 
     chk503928 : ["533577", "533578","503671", "503666", "533576", "503667", "324201", "503221", "604028", "503668", "533580", "503669", "533579", "533581", "503670"] 
};  

现在我需要做的是从该对象访问信息。如果我做了一个简单的警报(rulesObject.chk533570),它的工作原理非常完美 - 给我的是我所需要的。但是,我需要做的是根据刚刚点击的内容访问特定规则。因此,举例来说,如果我点击看重“533570”的复选框,它会经过以下:

$('input').click(function(){    
if(this.checked) { 
    checkRules(this.value, 'checked'); 
} else { 
    checkRules(this.value, 'unchecked'); 
}   
});  

(当然我使用jQuery在那里,但我使用它在整个Web应用程序等等我不介意来回走动。)

现在到我的checkRules函数。它仍然非常简单,因为它处于开始阶段 - 我只想提醒我刚刚选择的东西的价值。再一次,如果我确实警告(rulesObject.chk533570),即使在函数内部,我也会得到正确的结果,但我需要访问我刚选择的内容,所以我必须将字母'chk'添加到对象属性的开头名称,然后附加刚选择的值(在本例中为533570)。下面是我试图做到这一点的方法:

function checkRules(justselected, state) { 
     rulename= 'chk' + justselected; 
     currentrules = rulesObject.rulename; 

     alert(rulename);   
     alert(currentrules); 
} 

提示1:chk533570 红色警戒2:未定义

function checkRules(justselected, state) { 
     rulename= 'chk' + justselected; 

     alert(rulesObject.rulename); 
}  

警报:未定义

function checkRules(justselected, state) { 
     rulename= 'chk' + justselected; 

     alert(rulesObject + '.chk' + justselected); 
}  

警告:[对象的对象] .chk533570

function checkRules(justselected, state) {  
     alert(rulesObject.chk533570); 
}  

Alert:533577,503671,503667,604028,503661

那么,任何想法如何正确调用该名称,以便我得到正确的结果?我也尝试过没有'chk',但javascript对象并不喜欢完全的数字属性。

+0

http://stackoverflow.com/questions/9709130/javascript-object-using-to-retrieve-values/9709167 – jbabey 2012-03-28 20:15:23

回答

1

obj.keyobj['key']相同 - 但在第二种方式中,由于键是简单的JavaScript表达式,键可以是动态的。

所以,你可以简单地使用rulesObject['chk' + justselected]

function checkRules(justselected, state) {  
     alert(rulesObject['chk' + justselected]); 
} 

很久以前,人们使用的方式来使用 alert(eval('rulesObject.chk' + justselected)); 。虽然这工作,不使用此。应始终避免使用eval();在这种情况下,反正有一种更清洁的方式。

+1

的副本谢谢你这么多。只要它让我接受它(它告诉我我必须等待11分钟),我会去做的。这正是我需要的! – amydot 2012-03-28 19:55:35

+0

啊,谢谢你的额外说明,不要使用eval! – amydot 2012-03-28 20:15:08