2009-12-12 121 views
0
var test1; 
$(document).ready(function() { 
    test1 = $("#test1ID").jQueryPlugin(); 
}); 

var test2; 
$(document).ready(function() { 
    test2 = $("#test2ID").jQueryPlugin(); 
}); 

... 

這樣做是爲了我們可以做test1.foo() ... foo是jQueryPlugin中的一個函數,可以使用test1.foo()語法訪問;如何將字符串值轉換爲JavaScript中的變量?

所以我們有一個包含字符串(TEST1,TEST2,...) 的數組,我們需要訪問環路FOO(),而:

for(i=0; i < theArrayOfStrings.length; i++){ 
    theArrayOfStrings[i].foo(); 
    //so here is the problem... we can't do test1.foo(), test2.foo() ... =(
} 

如何調用函數的任何想法foo(),而在循環? 或者我們可以在javascript中將字符串值轉換爲變量嗎?

回答

3

eval() function用來在一個字符串變量來評估腳本。例如:

var test1; 
eval("test1=" + theArrayOfStrings[i]); 
test1.foo(); 

而是採取了永樂在這個問題在使用前When is JavaScript’s eval() not evil?

+0

eval不是這個問題的解決方案 – 2009-12-12 12:59:34

+0

你讀過OP的評論at astander的回答嗎 – Canavar 2009-12-12 13:06:06

+0

這是行得通的...如果這是唯一的選擇,那麼我會給它一個。謝謝! – Jronny 2009-12-12 13:38:44

0

你試過

$('#' + theArrayOfStrings[i]).foo(); 

看一看API/1.3/Selectors

+0

我只是沒有問題的jQuery選擇器。 TheArrayOfStrings [i]不是我們需要調用的ID ... =( – Jronny 2009-12-12 12:52:33

+0

那麼你是說ArrayOfStrings不包含你想調用的test1,test2等?它包含了什麼? – 2009-12-12 12:56:57

+0

test1,test2是不是ID ...他們只是變量,保持了jQuery插件集成產生的元素的價值 – Jronny 2009-12-12 13:36:03

0
var test = [], n = 5; 
$(document).ready(function() { 
    for(var i=0; i < n; i++) 
     test.push($("#test"+i+"ID").jQueryPlugin()); 
}); 

// the values in test won't be accessible before the document is loaded. 
+0

test1ID,和test2ID實際上應該是硬編碼。=( – Jronny 2009-12-12 13:42:40

4

這可能是值得創建一個對象來保存你所有的「試驗」:

var tests = {}; 

$(document).ready(function() { 
    tests.test1 = $("#test1ID").jQueryPlugin(); 
    tests.test2 = $("#test2ID").jQueryPlugin(); 
}); 

for(i=0; i < theArrayOfStrings.length; i++){ 
    tests[theArrayOfStrings[i]].foo(); 
} 
+0

好主意,但問題是如果我不使用循環訪問foo ()而言,我使用一個