使用eval javascript创建动态变量

时间:2015-01-29 21:35:42

标签: javascript jquery

我需要类似于包含变量名称/元素ID的对的关联数组。

循环遍历此数组/对象,将元素ID分配给与其对应的变量名称。像这样:

jsFiddle

HTML:

<input id="fld_1" class="input" type="text" value="bob" /><br>
<input id="fld_2" class="input" type="text" value="fred" /><br>
<input id="fld_3" class="input" type="text" value="pat" /><br>
<input id="mybutt" class="btn" type="button" value="Test" />

js:

objFields = {'f1':'fld_1', 'f2':'fld_2', 'f3':'fld_3'};
arrErrors = [];

$('#mybutt').click(function(){
    alert('iii');
    for (var key in objFields){
     //   eval(key = objFields[key]);
        eval(key) = objFields[key];
        alert('f1: ' +f1);
    }
});

无需使用eval,我只需将密钥转换为变量名。

有人能告诉我哪里出错了吗?

更新和解决方案:

JCOC611做对了,但我不清楚我是怎么问这个问题的。作为this revised fiddle which implements JCOC611's solution中的演示,必须使用变量/字段名称​​来获取字段内容的值,如下所示:

$('#mybutt').click(function(){
    for (var key in objFields){
        var tmp = objFields[key];
        eval('var ' + key+ ' = $("#' +tmp+ '").val()');
    }
});

4 个答案:

答案 0 :(得分:3)

如果你知道自己在做什么,并且绝对确定它,那么请使用:

eval(key + " = " + JSON.stringify(objFields[key]));

或者,如果你想要局部变量:

eval("var " + key + " = " + JSON.stringify(objFields[key]));

否则,我建议您实施其他答案之一。

答案 1 :(得分:2)

根本不需要eval(),你想要避免它。你真正需要做的就是:

for (var key in objFields){
    alert(key+': '+objFields[key]);
    window[key] = objFields[key];
}

会给你:

'f1':'fld_1'
'f2':'fld_2'
'f3':'fld_3'

其中:

f1 = 'fld_1';
f2 = 'fld_2';
f3 = 'fld_3';

答案 2 :(得分:0)

如果它是一个全局变量,它就像:

一样简单
window[key] = objFields[key];

 window.key = objFields[key];

第二个是免疫weird name

答案 3 :(得分:0)

eval函数运行字符串添加代码并返回结果。

您的代码所做的是评估未定义的密钥的模糊,然后尝试将其设置为新值。 就像写5 = 4;

正确的语法:

eval('var ' + key + ' = ' + objFields[key]);
相关问题