I’m creating a javavascript object which I’m calling rulesObject. The idea is for it to be a javascript object containing all of the rules I need to check to enable/disable other checkboxes that is dynamically generated from a mysql database at the very beginning of the script. For now, I’m just testing it out with two rules which I know create the scenario I’m looking for, so here’s what my object looks like at the moment:
rulesObject = {
chk533570 : ["533577", "503671", "503667", "604028", "503661"],
chk503928 : ["533577", "533578","503671", "503666", "533576", "503667", "324201", "503221", "604028", "503668", "533580", "503669", "533579", "533581", "503670"]
};
Now what I need to do is access the information out of that object. If I do a simple alert(rulesObject. chk533570), it works PERFECTLY – gives me exactly what I need. However, what I’m going to need to do is access a specific rule based on what was just clicked by running through the following. So, for example, if I clicked the checkbox valued “533570”, it would go through the following:
$('input').click(function(){
if(this.checked) {
checkRules(this.value, 'checked');
} else {
checkRules(this.value, 'unchecked');
}
});
(Of course I’m using jQuery there, but I’m using it throughout the web app so I don’t mind going back and forth.)
Now onto my checkRules function. It’s still very simple as it’s in the beginning stages – I just want to alert the value of what I just selected. Again, if I do alert(rulesObject. chk533570), even within the function, I get the right result, but I need to access what I just selected, so I have to add the letters ‘chk’ to the beginning of the object property name and then append the justselected value (which in this case equals 533570). Here are the ways I’ve tried to do it:
function checkRules(justselected, state) {
rulename= 'chk' + justselected;
currentrules = rulesObject.rulename;
alert(rulename);
alert(currentrules);
}
Alert 1: chk533570
Alert 2: undefined
function checkRules(justselected, state) {
rulename= 'chk' + justselected;
alert(rulesObject.rulename);
}
Alert: Undefined
function checkRules(justselected, state) {
rulename= 'chk' + justselected;
alert(rulesObject + '.chk' + justselected);
}
Alert: [object Object].chk533570
function checkRules(justselected, state) {
alert(rulesObject.chk533570);
}
Alert: 533577,503671,503667,604028,503661
So, any idea how to properly call that name so that I get the right results? I also tried not having the ‘chk’ in there at all, but the javascript object didn’t like a completely numeral property.
obj.keyis the same asobj['key']– but in the second way the key can be dynamic since it’s a plain JavaScript expression.So you can simply use
rulesObject['chk' + justselected]:Long time ago people used to use
by the way. While this works, do not use this. Usingalert(eval('rulesObject.chk' + justselected));eval()should be avoided at all times; and in this case there is a much cleaner way anyway.