使用参数作为属性

时间:2014-11-26 19:36:24

标签: javascript

我试图调用一个循环选出两个不同选项的函数,使用参数告诉函数应该使用哪个项目数组。当我尝试将参数转换为"纯文本"这样我就可以将它用作calendarModel的属性。如果我使用点表示法,它会尝试访问category中名为calendarModel的属性,这显然不起作用。

在看了这个问题之后:How to create an object property from a variable value in JavaScript?我认为我的解决方案会起作用,但问题中的问题并不像我的那样,所以我必须误解它或其他东西。

现在我只获得 1选项并且未定义。它确实应该与yearsmonths中的项目一样多,并且具有值。我在哪里错了?

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);;
}())

2 个答案:

答案 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媒体资源的相应值