2011-06-08 19 views
4

这是我缩短脚本:jQuery的 - 将一个字符串变量名一样

var string1 = "This is string 1"; 
var string2 = "This is string 2"; 

function test() { 
    var selectedOption = $("select#myoptions option:selected").attr("id"); 
    var str = 'string'+selectedOption; 
    $("div#result").html(str); 
} 
$("select#myoptions").change(test); 

我有一个下拉列表,每个选项都有一个整数ID。当选择这个下拉列表时,我希望jQuery获取所选选项的ID并显示在末尾具有选定ID的字符串变量的内容。

如果选择ID为“1”的选择,“这是串1”将显示,...

但我现在得到的是文本“字符串1”改为显示文本“这是字符串1“。

我需要一些帮助。非常感谢!

回答

6

你可以更新您的测试功能,使用eval()

function test() { 
    var selectedOption = $("select#myoptions option:selected").attr("id"); 
    eval('$("div#result").html(string' + selectedOption + ');'); 
} 

把那一个镜头。

我提供这个作为一种方式给你你到底在问什么,虽然我真的很喜欢Rocket提供的答案,它需要对你如何存储你的字符串做一些小的改动。

+0

(不客气;)) – jcolebrand 2011-06-08 21:01:39

3

任何你不能做的原因?

function test() { 
    var selectedOption = $("select#myoptions option:selected").attr("id"); 
    var str = 'This is string ' + selectedOption; 
    $("div#result").html(str); 
} 
$("select#myoptions").change(test); 

其实,我想你比显示不同的字符串,请尝试:

var stringArray = ['this is string 1', 'this is string 2']; 
function test() { 
    var selectedOption = $("select#myoptions option:selected").attr("id"); 
    var str = stringArray[selectedOption -1]; 
    $("div#result").html(str); 
} 
$("select#myoptions").change(test); 

你不能动态地像你提到的使用变量,最好的办法是让一个数组,拉项目从通过指数。

+1

嗨,“这是字符串...”只是一个例子。他们可以是其他任何东西,如HTML,CSS ... – 2011-06-08 17:24:58

+0

是的,有点通过阅读后想到,看到我更现实的建议。 – 2011-06-08 17:26:39

+0

我喜欢更新的版本。 – jcolebrand 2011-06-08 17:40:06

3

您可以使用一个对象来存储这些值,然后通过它们的键来获取它们。

var strings = { 
    string1: 'This is string 1', 
    string2: 'This is string 2' 
}; 

function test() { 
    var selectedOption = $("select#myoptions option:selected").attr("id"); 
    var str = 'string'+selectedOption; 
    $("div#result").html(strings[str]); 
} 
$("select#myoptions").change(test); 

或者,你可以离开琴弦,你有他们的方式,并通过window对象访问他们,如果他们是在全球范围内。

var string1 = "This is string 1"; 
var string2 = "This is string 2"; 

function test() { 
    var selectedOption = $("select#myoptions option:selected").attr("id"); 
    var str = 'string'+selectedOption; 
    $("div#result").html(window[str]); 
} 
$("select#myoptions").change(test); 
+1

更好的然后使用eval,因为eval是危险的 – 2011-06-08 17:26:17

+0

@Bernardo我也喜欢这个选项,但我必须说,调用eval'危险'是非常愚蠢的。既然每个浏览器都有开发工具和JavaScript控制台,任何访问者都可以执行他们喜欢的任何JavaScript代码...... eval没有任何固有的危险。要备份我的说法,请参阅此评分较高的答案:http://stackoverflow.com/questions/86513/why-is-using-javascript-eval-function-a-bad-idea/87260#87260 – Fosco 2011-06-08 17:28:42

+0

@Fosco eval是危险和它不傻,eval可以导致JavaScript注入。如果任何客户端输入了string1和string2,则可以将恶意和不需要的代码放入字符串中。因为我不知道如果string1/string2将由客户端输入或不安全指向一个不包含eval的解决方案。 – 2011-06-08 17:32:34

2

没有特别的理由,为什么它必须比数组更难,对吗?

var strs = [ 
    "This is string 1", // Note, this is strs[0], not strs[1] 
    "This is string 2" 
]; 

function test() { 
    var selectedOption = $("select#myoptions option:selected").attr("id"); 
    $("div#result").html(strs[selectedOption]); 
} 
$("select#myoptions").change(test); 

如果你真的需要,你可以使用哈希,像

var strs = { 
    dog: "This is string 1", 
    cat: "This is string 2" 
}; 

但在任何情况下,当人们试图查找使用一个不变的值一个变量(99%的时间即一个数组的名称)和一个变量(即一个键),他们想要使用一些简单的数组或哈希。

3

所以,我很惊讶没有人添加这个答案,这直接回答OP的问题。我同意其他方法更好,但你可以通过这样做的方式解决他的问题:

var str = 'string'+selectedOption; 
var foundString = window[str]; 
+0

在我看来,这确实是一件容易的事情。 – Twister1002 2014-06-11 16:22:35

相关问题