2011-12-21 48 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');