Shaik Syed Ali
Shaik Syed Ali

Reputation: 3519

TypeError: 'undefined' is not an object in Javascript

I have a piece of Javascript code that assigns string of values to a string array. Unfortunately if I try to add more than one string to the array, my UI simulator(which runs on JS code) closes unexpectedly. I have tried debugging but I cannot find anything. I am attaching that piece of code where the issue is. may be you guys could find some flaw? On the pop up button click the values I selcted on the UI should get stored in the array and I have a corressponding variable on the server side to handle this string array.

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

            }

Upvotes: 0

Views: 678

Answers (3)

sarath
sarath

Reputation: 459

var selectedSolution = [solutionsLength]; 

keeps the value in the selectedSolution variable.

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

So make it simple

var selectedSolution = [];

Upvotes: 1

UtsavShah
UtsavShah

Reputation: 877

Change

var selectedSolution = [solutionsLength];

to

var selectedSolution = [];

This makes your array have an extra item that might be causing a crash.

Also,

you have an

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

But no corresponding else, so your array has undefined values for i which are not entering the if.

Maybe adding an empty string might solve it:

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

Upvotes: 1

Rohan Kumar
Rohan Kumar

Reputation: 40639

The code is looking fine but there seems to be a piece of code which can cause error. For example, you are assigning var selectedSolution = [solutionsLength]; and for example solutionsLength is 5 then your loop runs for 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;
    }
}

So you can try to use push() like

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

and on initialization change it like,

 var selectedSolution = [];

Hopefully this will solve your problem.

Upvotes: 1

Related Questions