我试图调用一个循环选出两个不同选项的函数,使用参数告诉函数应该使用哪个项目数组。当我尝试将参数转换为"纯文本"这样我就可以将它用作calendarModel
的属性。如果我使用点表示法,它会尝试访问category
中名为calendarModel
的属性,这显然不起作用。
在看了这个问题之后:How to create an object property from a variable value in JavaScript?我认为我的解决方案会起作用,但问题中的问题并不像我的那样,所以我必须误解它或其他东西。
现在我只获得 1选项并且未定义。它确实应该与years
和months
中的项目一样多,并且具有值。我在哪里错了?
var calendarModel = {
months: ['January', 'February', 'March', 'April', 'May', 'June',
'July', 'August', 'September', 'October', 'November', 'December'
],
years: ['2015', '2016', '2017', '2018', '2019', '2020', '2021', '2022', '2023', '2024']
}
(function() {
var selectMonth = document.getElementById('month');
var selectYear = document.getElementById('year');
function createOptions(category, element) {
for (i = 0; i < calendarModel[category].length; i++) {
var option = document.createElement('option');
option.innerHTML = calendarModel[category[i]];
option.value = option.innerHTML;
element.appendChild(option);
}
}
createOptions('years', selectYear);
createOptions('months', selectMonth);;
}())
答案 0 :(得分:1)
你有点混乱。 category
只是一个字符串,因此您将y
(年)传入calendarModel
我想你想在外面使用循环索引。
option.innerHTML = calendarModel[category][i]; //notice [i] is not the index of the category string anymore
答案 1 :(得分:0)
如果您查看以下行:
option.innerHTML = calendarModel[category[i]];
这将尝试在类别上查找属性i
,这只是一个字符串。这就是你未定义的原因。
相反,您应该执行以下操作:
option.innerHTML = calendarModel[category][i];
这会在category
calendarModel
媒体资源的相应值