访问连接变量名的值

时间:2014-03-07 03:29:27

标签: javascript html variables concatenation

问题描述:

我正在尝试简化一些代码,除了我显然只是创建一个字符串而不是访问相应变量的值。如何将 'total_' + animal 转换为我可以访问的变量,以便动态地将结果分配给DIV?

代码:

JS:

function tallyAnimals(animal) {
    total_animal++;
    if (animal == "dog")  { total_dog++;  }
    if (animal == "cat")  { total_cat++;  }
    if (animal == "bird") { total_bird++; }
    if (animal == "fish") { total_fish++; }

    //The problem line
    $('#' + animal).html('total_' + animal);
}

HTML:

<div id="animals">

    <div id="dog">0</div>
    <div id="cat">0</div>
    <div id="bird">0</div>
    <div id="fish">0</div>

</div>

2 个答案:

答案 0 :(得分:2)

因为'total _'+动物看起来是全局的,没有eval:

var function tallyAnimals(animal) {
    total_animal++;
    if (animal == "dog")  { total_dog++;  }
    if (animal == "cat")  { total_cat++;  }
    if (animal == "bird") { total_bird++; }
    if (animal == "fish") { total_fish++; }

    //The problem line
    $('#' + animal).html(window['total_' + animal]);
}

should work

编辑:

理想情况下,您不应使用全局变量,并将“总计”+动物变量附加到精确范围。

前:

在函数tallyAnimal之外的文件中某处:

var totals = {
   dog:0,
   cat:0,
   ...
}

所以你可以写

$('#' + animal).html(totals[animal]);

答案 1 :(得分:1)

您可以使用 eval()功能。这是解决方案:

function tallyAnimals(animal) {
    total_animal++;
    if (animal == "dog")  { total_dog++;  }
    if (animal == "cat")  { total_cat++;  }
    if (animal == "bird") { total_bird++; }
    if (animal == "fish") { total_fish++; }

    $('#' + animal).html(eval('total_' + animal));
}

Eval是为这种工作而制作的!这样做你也可以使用更少的行:

function tallyAnimals(animal) {
    total_animal++;
    eval("total_"+animal."++");
    $('#' + animal).html(eval('total_' + animal));
}