Во-первых, помните, что вы не пишете на C # или Java. Структура for (var ... in ...)
не выполняет итерацию коллекции. Вы всегда должны проверять hasOwnProperty
, чтобы увидеть, относится ли имя свойства к самому объекту:
if (!members.hasOwnProperty(member)) continue;
Затем убедитесь, что значение свойства является объектом, а не функцией и т. Д.
Во-вторых, вашей переменной btn
не хватает объявления var
. Вы создаете глобальную переменную с именем btn
, а не локальную для вашей функции.
Далее, у вас есть ошибка опечатки в вашем исходном коде. Ваш исходный код на самом деле интерпретируется следующим образом (благодаря автоматической вставке точек с запятой в JavaScript функция !):
btn.onclick = function (id) {
return function () {
addForm(id); <-- this id is now the click event's event object, not what you want
};
};
(members[member].id); <-- this line will have no side effect
Чтобы запустить вашу программу в оригинальном стиле, вам нужно заключить в скобки определение функции:
btn.onclick = (function (id) {
return function () {
addForm(id);
};
})(members[member].id);