我正在创建一个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,但我在整个网络应用程序中使用它,所以我不介意来回走。)
现在进入我的checkRules函数。它仍然非常简单,因为它处于开始阶段 - 我只想提醒我刚才选择的价值。再次,如果我做警报(rulesObject。chk533570),即使在函数内,我得到了正确的结果,但我需要访问我刚刚选择的内容,所以我必须将字母'chk'添加到对象属性的开头name,然后追加刚刚选择的值(在本例中等于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);
}
警告:533577,503671,503667,604028,503661
那么,任何想法如何正确地调用该名称以便我得到正确的结果?我也尝试过根本没有'chk',但javascript对象不喜欢完全数字属性。
答案 0 :(得分:1)
obj.key
与obj['key']
相同 - 但在第二种方式中,密钥可以是动态的,因为它是一个简单的JavaScript表达式。
所以你可以简单地使用rulesObject['chk' + justselected]
:
function checkRules(justselected, state) {
alert(rulesObject['chk' + justselected]);
}
很久以前,人们习惯使用 。虽然这有效,但不要使用此。应始终避免使用alert(eval('rulesObject.chk' + justselected));
eval()
;在这种情况下,无论如何都有一个更清洁的方式。