Мне нужно что-то вроде ассоциативного массива, который содержит пары идентификаторов имен/элементов.Создание динамических переменных с использованием eval javascript
Цикл через этот массив/объект присваивает идентификатор элемента имени переменной, являющемуся его аналогом. Что-то вроде этого:
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
, мне просто нужно повернуть ключ в имени переменной.
Может кто-нибудь показать мне, где я ошибся?
UPDATE и РЕШЕНИЕ:
JCOC611 получил это право, но я не ясно, как я задал вопрос. Как demo'd в 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()');
}
});
Есть ли конкретная причина, почему вы должны установить переменную и не использовать 'objFields [ "f1"]'? – JCOC611
'window [key]', который бы сделал глобальные переменные, но не советовал помещать произвольные переменные в глобальную область. –
Я думаю, что вы, вероятно, имеете дело с проблемой не знать, как обращаться к элементам из асинхронного вызова вне вызова функции, если вы считаете, что вам нужно записывать данные в глобальную область. Правильный подход здесь - обратные вызовы. –