TypeError:'undefined'不是Javascript中的对象

时间:2016-05-20 05:12:43

标签: javascript jquery backbone.js

我有一段Javascript代码,用于将字符串数组分配给字符串数组。 不幸的是,如果我尝试向数组添加多个字符串,我的UI模拟器(在JS代码上运行)会意外关闭。我试过调试但是找不到任何东西。我正在附上问题的那段代码。也许你们可以找到一些缺陷?在弹出按钮上单击我在UI上选择的值应该存储在数组中,并且我在服务器端有一个corressponding变量来处理这个字符串数组。

_popupButtonClick: function (button) {
                var solutions = this._stateModel.get('solutionName');
                var i;
                var solutionsLength = solutions.length;
                var selectedSolution = [solutionsLength];


                this.clearPopupTimer();
                if (button.position === StatusViewModel.ResponseType.Ok) {

                    for(i=0;i<solutionsLength;i++)
                    {
                        if(this._list.listItems[i].selected)
                        {
                            selectedSolution[i] = this._list.listItems[i].options.value;
                        }
                    }

                    this._stateModel.save({
                        selectedsolutions: selectedSolution,
                        viewResponse: StatusViewModel.ResponseType.Ok
                    });
                } else {
                    this._stateModel.save({
                        viewResponse: StatusViewModel.ResponseType.Cancel
                    });
                }

            }

3 个答案:

答案 0 :(得分:1)

更改

var selectedSolution = [solutionsLength];

var selectedSolution = [];

这会使您的数组有一个可能导致崩溃的额外项目。

此外,

你有

if(this._list.listItems[i].selected)
{
    selectedSolution[i] = this._list.listItems[i].options.value;
} 

但是没有相应的其他内容,所以你的数组有i的未定义值,它们没有输入if。

也许添加一个空字符串可能会解决它:

if(this._list.listItems[i].selected)
{
    selectedSolution[i] = this._list.listItems[i].options.value;
} 
else
{
    selectedSolution[i] = "";
}

答案 1 :(得分:1)

代码看起来很好,但似乎有一段代码可能导致错误。例如,您要分配var selectedSolution = [solutionsLength];,例如solutionsLength is 5,那么您的循环将运行5 times

for(i=0;i<solutionsLength;i++) // runs for 5 times
{
    if(this._list.listItems[i].selected)
    {
        // but selectedSolution = [5]; which is on 0th index and from 1st to 4th index it is undefined
        selectedSolution[i] = this._list.listItems[i].options.value;
    }
}

因此,您可以尝试使用push()之类的

 selectedSolution.push(this._list.listItems[i].options.value);

并在初始化时更改它,

 var selectedSolution = [];

希望这可以解决您的问题。

答案 2 :(得分:1)

var selectedSolution = [solutionsLength]; 

将值保留在selectedSolution变量中。

    var selectedSolution = [3];
    selectedSolution[0] gives the values as 3

所以说实话吧

var selectedSolution = [];