2009-12-12 123 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 ()而言,我使用一个