2011-05-24 43 views
0

返回一个变量的值我有一些复选框有唯一的ID,像这样结合动态和静态文本

<input id="apple" /> 
<input id="banana" /> 
<input id="orange" /> 

我也有许多与追加到末尾的词“树”变量ID。当我点击输入时,我可以得到ID,但我想返回变量的而不是我构建的名称。

有人可以请指出我在这段代码中做错了什么?

$(document).ready(function(){ 

    var appleTree = 1; 
    var bananaTree = 4; 
    var orangeTree = 2; 

    $('input').click(function() { 

     var ID = $(this).attr('id'); 
     var combinedName = (ID + "Tree"); 

     console.log(combinedName); 

    }); 

}); 

回答

2

您可以创建HashMap的约翰·格林说,还是去邪(但速度更快)的EVAL路线:

console.log(eval(combinedName)); 

编辑:我不是说字面上更快(我不知道如果是),我只是意味着更少的变化。

+0

除了是邪恶之外,其实性能通常要慢得多。 :) – 2011-05-24 10:51:48

+0

为什么它是邪恶的? – ajcw 2011-05-24 11:38:25

+0

@John:因为eval会运行任何你放入它的东西 - 在SO上有几百个问题来解决这个问题,我会让你搜索并找到它们。 – 2011-05-24 12:33:36

3

你必须创建一个HashMap:

$(document).ready(function(){ 
    var trees = { 
     appleTree:1, bananaTree:4, orangeTree:2 
    }; 

    $('input').click(function() { 

     var ID = $(this).attr('id'); 
     var combinedName = (ID + "Tree"); 
     var treeVal = trees[combinedName]; 
     console.log(treeVal); 
    }); 
}); 
1

CombinedName只是您登录的字符串。 我假设身份证是苹果,香蕉或桔子(在这个例子中),并且你想要变量的值对应于ID +“Tree”

我建议把你的值放在一个包含当前变量名的对象中作为关键。之后,您可以仅使用您制作的字符串引用该对象,并获得值

$(document).ready(function(){ 
    var values = {"appleTree": 1, "bananaTree": 4, "orangeTree": 2}; 

    $('input').click(function() { 
     var ID = $(this).attr('id'); 
     var combinedName = (ID + "Tree"); 
     console.log(values[combinedName]); 
    }); 
});