Reputation: 1144
I'm trying to change a global variable by setting it as a parameter in a function. The problem I'm running into is that my global variable does not change when I change the local variable. I understand that the scope of the variables is what's causing this, but I do not know how to make it work. Here is the code I'm using:
var blnUpgradeGlobal;
function SelectUpgrade(strUpgradeName, blnUpgradeLocal) {
if (blnUpgradeLocal) {
blnUpgradeLocal= false;
$("#" + strUpgradeName).css("background-color", "#EAC300")
}
else {
blnUpgradeLocal= true;
$("#" + strUpgradeName).css("background-color", "Lime")
}
}
<div id="Upgrade1" onclick="SelectUpgrade(this.id, blnUpgradeGlobal)">
Content
</div>
So What I'm trying to accomplish here is so that when the user clicks the div, it toggles the boolean global variable set in the onClick event. I don't want to specify the exact variable in the function because I would then need to write a big nested if statement because there are a bunch of upgrades.
Thank you in advance.
Upvotes: 3
Views: 4428
Reputation: 71939
I don't want to specify the exact variable in the function because I would then need to write a big nested if statement because there are a bunch of upgrades
Then your best bet is to have all those global variables wrapped in an object (it's also less pollution in the global namespace). Something like this:
var globalVars = {
foo: true,
bar: 1,
baz: 'foo'
};
Then, in your function, just reference the object (you may pass it instead, if it's not global):
function doStuff(glb) {
glb.foo = false;
glb.bar = 2;
}
doStuff(globalVars);
Upvotes: 0
Reputation: 18771
a global var can be accessed and changed anywhere in the code.
Get rid of the parameter and then use it.
What is happening is that you are passing in the value of the global but only changing the value of the local var because the local namespace is searched first
Upvotes: 3
Reputation: 255135
There are 2 possible options:
Change the 2nd parameter name (from blnUpgradeLocal
to something else) in the function declaration
Change the global variable value using window.blnUpgradeGlobal
reference
The former is better
Upvotes: 3