I have several jQuery function like
function setOne();
setTwo(); setThree();
and a variable var number
that values respectively \"one\", \
If you have your function in the global scope (on the window object) you can do:
// calls function setOne, setTwo, ... depending on number.
window["set" + number]();
And using eval
will allow you to run functions in local scope:
eval("set" + number + "()");
When is JavaScript's eval() not evil?
If the variable details the actual name of the JQuery function and you want to apply the function to a DOM element like 'body', you can do the following:
$('body')['function-name']('params');
As simple as this is:
function hello(){
alert("hello");
}
var str = "hello";
eval(str+"()");
Why do you have three functions for that?
var number;
function setNumber(n) {
number = n;
}
setNumber(1)
will set number to 1
setNumber(2)
will set number to 2
ect
Create a name -> function
map:
var funcs = {
'one': setOne,
'two': setTwo
/*...*/
};
Then you call the function with:
funcs[number]();
Provided your functions are in the global scope, try:
function setOne() {
console.log('setOne called');
}
function setTwo() {
console.log('setTwo called');
}
function setThree() {
console.log('setThree called');
}
var number, funcName;
number = 'one';
funcName = 'set' + number.charAt(0).toUpperCase() + number.slice(1);
window[funcName](); // output: setOne called
number = 'two';
funcName = 'set' + number.charAt(0).toUpperCase() + number.slice(1);
window[funcName](); // output: setTwo called
number = 'three';
funcName = 'set' + number.charAt(0).toUpperCase() + number.slice(1);
window[funcName](); // output: setThree called