2011-12-21 30 views
17

Tengo varios función jQuery como function setOne(); setTwo(); setThree();llamar a una función llamada jQuery en una variable

y una variable var number que valora, respectivamente, "uno", "dos", "tres".

¿Cómo puedo llamar a la función "SetOne()" cuando los valores de número "uno", "función" setTwo cuando el número de valores "dos" y así sucesivamente ...?

Muchas gracias de antemano. Cualquier ayuda será apreciada.

+1

Parece que las funciones normales de JavaScript para mí. –

Respuesta

32

Si usted tiene su función en el ámbito mundial (en el objeto ventana) que puede hacer :

// calls function setOne, setTwo, ... depending on number. 
window["set" + number](); 

Y usando eval le permitirá ejecutar funciones en el ámbito local:

eval("set" + number + "()"); 

When is JavaScript's eval()not evil?

+1

La mejor respuesta hasta ahora. +1 – Tigraine

+0

La mejor respuesta, acepto esto, simple y útil y ¡usted sabe exactamente lo que quiero decir! ¡Gracias! Si lo desea, puede votar mi pregunta. – bobighorus

+0

'this [" set "+ number]();' no funcionaría. Solo si 'setX' es una propiedad de lo que' this' se refiere, pero no si 'setX' es una variable local. –

8

crear un mapa name -> function:

var funcs = { 
    'one': setOne, 
    'two': setTwo 
    /*...*/ 
}; 

A continuación, se llama a la función con:

funcs[number](); 
+0

En realidad, la respuesta de AndreasAL es la mejor. Las personas necesitan entender que en JavaScript todo es un diccionario e incluso las funciones son solo entradas en el diccionario de alcance global al que se puede acceder de esa manera. – Tigraine

+0

Gracias por su respuesta Felix, pero parece una iteración de cambio. Necesito una solución automática como set + number +() que signifique setOne(); . Espero haber sido claro. – bobighorus

+0

@Tigraine: solo funciona si las funciones son globales, lo que en general no es una buena idea (contaminación del espacio de nombres global). –

0

¿Por qué tienen tres funciones para que?

var number; 
function setNumber(n) { 
    number = n; 
} 

setNumber(1) establecerá número a 1

setNumber(2) establecerá el número de 2

ect

+0

Gracias por tu respuesta, pero creo que no entiendes mi pregunta ... :) – bobighorus

2

siempre y cuando sus funciones están en el ámbito global, pruebe:

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 
0

Tan simple como esto es:

function hello(){ 
    alert("hello"); 
} 
var str = "hello"; 
eval(str+"()"); 
+0

Sí, pero tengo que llamar a una función! – bobighorus

+0

@bobighorus Llama a la función hello() ... use 'var str =" One ";' 'eval (" set "+ str +"() ");' para su ejemplo. Incluso puede establecer * parámetros nombrados * de esta manera ... 'eval (" set "+ str +" (parameterName) ");' –

6

Si la variable detalla el nombre real de la función jQuery y Si desea aplicar la función a un elemento DOM como 'cuerpo', puede hacer lo siguiente:

$('body')['function-name']('params'); 
Cuestiones relacionadas