我需要类似于包含变量名称/元素ID的对的关联数组。
循环遍历此数组/对象,将元素ID分配给与其对应的变量名称。像这样:
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()');
}
});
答案 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]);