0

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.

amydot
  • 3
  • 2
  • duplicate of http://stackoverflow.com/questions/9709130/javascript-object-using-to-retrieve-values/9709167 – jbabey Mar 28 '12 at 20:15

1 Answers1

1

obj.key is the same as obj['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]:

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

Long time ago people used to use alert(eval('rulesObject.chk' + justselected)); by the way. While this works, do not use this. Using eval() should be avoided at all times; and in this case there is a much cleaner way anyway.

ThiefMaster
  • 310,957
  • 84
  • 592
  • 636
  • 1
    Thank you so so so much. As soon as it lets me accept this (it tells me I have to wait 11 minutes), I am going to. This is exactly what I needed! – amydot Mar 28 '12 at 19:55
  • Ah, thanks for the additional clarification of not using eval too! – amydot Mar 28 '12 at 20:15