2011-12-21 43 views
17

名为jQuery的功能,我有几个jQuery的功能就像 function setOne(); setTwo(); setThree();调用一个变量

和可变var number分别值“一”,“二”,“三化”。

当数字值为“1”时,如何调用函数“setOne()”,当数字值为“2”时如何调用函数“setTwo”等...?

非常感谢你提前。任何帮助都会有所帮助。

+1

对我来说看起来像普通的JavaScript函数。 – 2011-12-21 10:28:22

回答

32

如果你有在全球范围内的功能(window对象),你可以做:

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

并使用eval将允许你在本地范围内运行函数:

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

When is JavaScript's eval()not evil?

+1

到目前为止最好的回答。 +1 – Tigraine 2011-12-21 10:32:32

+0

最好的回答,我接受这个,简单而有用,你确切地知道我的意思!谢谢!如果你想要你可以投我的问题。 – bobighorus 2011-12-21 10:39:02

+0

'this [“set”+ number]();'不起作用。只有'setX'是任何'this'引用的属性,但是如果'setX'是一个局部变量,则不会。 – 2011-12-21 10:43:22

8

创建name -> function图:

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

然后调用与功能:

funcs[number](); 
+0

其实AndreasAL的答案是更好的答案。人们需要明白,在JavaScript中,一切都是字典,甚至函数只能在全局范围字典中以这种方式访问​​。 – Tigraine 2011-12-21 10:33:24

+0

感谢您的答案Felix,但它好像是一个开关迭代。我需要一个像set + number +()这样的自动解决方案,这意味着setOne(); 。我希望我很清楚。 – bobighorus 2011-12-21 10:34:56

+0

@Tigraine:它只有在功能是全球性的时候才起作用,这通常不是一个好主意(全球名字空间污染)。 – 2011-12-21 10:37:16

0

为什么你对那三个功能?

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

setNumber(1)将设置数为1

setNumber(2)将设置数量为2

ECT

+0

谢谢你回答,但我认为你不明白我的问题... :) – bobighorus 2011-12-21 10:40:05

2

前提是你的功能在全球范围内,尝试:

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

这么简单,因为这是:

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

是的,但我必须调用一个函数! – bobighorus 2011-12-21 10:40:29

+0

@bobighorus这个调用函数hello()...使用'var str =“One”;''eval(“set”+ str +“()”);'例如。你甚至可以通过这种方式设置*命名参数...''eval(“set”+ str +“(parameterName)”);' – 2011-12-21 10:52:40

6

如果变量详细说明了JQuery函数的实际名称和您想要将该功能应用于DOM元素(如“body”),您可以执行以下操作:

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