Javascript 访问动态命名的对象属性
我正在创建一个javavascript对象,我称之为rulesObject。其思想是,它是一个javascript对象,包含我需要检查的所有规则,以启用/禁用在脚本开始时从mysql数据库动态生成的其他复选框。现在,我只是用两条规则来测试它,我知道这两条规则创建了我正在寻找的场景,所以现在我的对象是这样的:Javascript 访问动态命名的对象属性,javascript,javascript-objects,Javascript,Javascript Objects,我正在创建一个javavascript对象,我称之为rulesObject。其思想是,它是一个javascript对象,包含我需要检查的所有规则,以启用/禁用在脚本开始时从mysql数据库动态生成的其他复选框。现在,我只是用两条规则来测试它,我知道这两条规则创建了我正在寻找的场景,所以现在我的对象是这样的: rulesObject = { chk533570 : ["533577", "503671", "503667", "604028", "503661"],
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”添加到对象属性名称的开头,然后附加justselected值(在本例中等于533570)。以下是我尝试过的方法:
function checkRules(justselected, state) {
rulename= 'chk' + justselected;
currentrules = rulesObject.rulename;
alert(rulename);
alert(currentrules);
}
警报1:CHK53370
警报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);
}
警报:533577503671503667604028503661
那么,你知道如何正确地称呼这个名字,以便得到正确的结果吗?我还尝试了完全不使用“chk”,但javascript对象不喜欢完全数字属性。
obj.key
与obj['key']
相同,但第二种方式是键可以是动态的,因为它是一个普通的javascript表达式
因此,您只需使用rulesObject['chk'+justselected]
:
function checkRules(justselected, state) {
alert(rulesObject['chk' + justselected]);
}
很久以前,人们习惯于使用
alert(eval('rulesObject.chk'+justselected))代码>顺便说一下。当此选项起作用时,不要使用此选项。应始终避免使用eval()
;在这种情况下,还有一种更干净的方法。非常感谢您。一旦它让我接受这个(它告诉我必须等11分钟),我就要去。这正是我需要的!啊,感谢您对不使用eval的补充说明!副本