вызов функции jQuery с именем в переменной - PullRequest
20 голосов
/ 21 декабря 2011

У меня есть несколько функций jQuery, таких как function setOne(); setTwo(); setThree();

и переменная var number, которые имеют значения соответственно «один», «два», «три».

Как я могу вызвать функцию«setOne ()», когда числовое значение «один», функция «setTwo», когда числовое значение «два» и т. д. ...?

Заранее большое спасибо.Любая помощь будет оценена.

Ответы [ 6 ]

39 голосов
/ 21 декабря 2011

Если у вас есть функция в глобальной области видимости (в объекте окна), вы можете сделать:

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

А использование eval позволит вам запускать функции в локальной области:

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

Когда JavaScript eval() не зло?

8 голосов
/ 21 декабря 2011

Создание карты name -> function:

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

Затем вызывается функция с помощью:

funcs[number]();
6 голосов
/ 30 сентября 2015

Если переменная указывает фактическое имя функции JQuery и вы хотите применить функцию к элементу DOM, например, «body», вы можете сделать следующее:

 $('body')['function-name']('params');
2 голосов
/ 21 декабря 2011

Если ваши функции находятся в глобальной области, попробуйте:

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
1 голос
/ 21 декабря 2011

Так просто, как это:

function hello(){
    alert("hello");
}
var str = "hello";
eval(str+"()");
0 голосов
/ 21 декабря 2011

Почему у вас есть три функции для этого?

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

setNumber(1) установит номер в 1

setNumber(2) установит номер в 2

т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...