web-dev-qa-db-fra.com

appeler une fonction jQuery nommée dans une variable

J'ai plusieurs fonction jQuery comme function setOne(); setTwo(); setThree();

et une variable var number qui valorise respectivement "un", "deux", "trois".

Comment appeler la fonction "setOne ()" lorsque les valeurs numériques "un", la fonction "setTwo" lorsque les valeurs numériques "deux", etc.

Merci d'avance. Toute aide sera la bienvenue. 

18
bobighorus

Si vous avez votre fonction dans la portée globale (sur l'objet window), vous pouvez faire: 

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

Et utiliser eval vous permettra d’exécuter des fonctions dans la portée locale:

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

Quand JavaScript eval()n'est pas diabolique?

37
andlrc

Créez une carte name -> function:

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

Ensuite, vous appelez la fonction avec:

funcs[number]();
8
Felix Kling

Si la variable détaille le nom réel de la fonction JQuery et que vous souhaitez l'appliquer à un élément DOM tel que 'body', vous pouvez procéder comme suit:

 $('body')['function-name']('params');
6
Jose Rodrigues

Si vos fonctions sont dans la portée globale, essayez:

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
2
Yoshi

Aussi simple que cela est:

function hello(){
    alert("hello");
}
var str = "hello";
eval(str+"()");
1
I.G. Pascual

Pourquoi avez-vous trois fonctions pour cela?

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

setNumber(1) fixera le numéro à 1

setNumber(2) définira le nombre à 2

ect

0
OptimusCrime