Jquery - 将字符串视为变量名

时间:2011-06-08 17:21:33

标签: 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”的选项,将显示“This is string 1”,...

但我现在得到的是显示文本“string1”而不是文本“This is string 1”。

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

5 个答案:

答案 0 :(得分:6)

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

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

试一试。

我提供这个作为一种方式来准确地告诉你你所要求的,尽管我真的很喜欢Rocket提供的答案,这需要对你如何存储你的字符串进行一些小改动。

答案 1 :(得分: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);

你不能像你提到的那样动态使用变量,你最好的办法就是得到一个数组并按索引拉出项目。

答案 2 :(得分: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);

答案 3 :(得分:3)

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

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

答案 4 :(得分: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%的时候人们试图使用一个不变的值(即数组的名称)和一个变量(即一个键)来查找一个变量,他们想要使用更简单的东西数组或哈希。