RON2015
RON2015

Reputation: 443

JavaScript integer storing as undefined for some reason

basically I have a number stored within my javascript structure, something like the following:

MyProgram.data.main.padding;

console.log(MyProgram.data.main.padding); // will output the number, something like 34.

However, I need to store that number in a struct I have set up in

MyProgram.data.tests.main.padding; // this is a struct  " {'width':0, 'padding':0, 'acceptable' //etc...}

The problem is when I do this:

MyProgram.data.tests.main.padding = MyProgram.data.main.padding;

console.log(MyProgram.data.tests.main.padding); // shows undefined

any ideas why I can't store the number?

I really appreciate any help...

Can someone load this example on jsfiddle please? I don't know how: http://jsfiddle.net/hdnj52Lp/2/ RESULT OUTPUT ON MY LOCAL TEST: 0) acceptable: true fontSize undefined padding: undefined

    function MyProgram() {
var mp = this;

    this.main = {
        'data' : {
            'padding': 50,
            'fontSize': 10,
            'tests' : {
                'padding':null,
                'fontSize':null,
                'results':new Array()
            }
        },

        'test' : function () {
            console.log('running');
            var testResult = {'acceptable':false, 
                              'fontSize':0,
                              'padding':0} 

            //after some testing:
            var newComputedPadding = 100;
            var newComputedFontSize = 32;
            var acceptable = true;
            testResult.acceptable = acceptable;
            testResult.fontSize = newComputedFontSize;
            testResult.padding = newComputedPadding;

            mp.main.data.tests.results.push(testResult);
            mp.main.outputResults();
        },

        'outputResults' : function () {

            for(var i = 0; i < mp.main.data.tests.results.length; i++) {
                console.log( i + ') acceptable: ' + mp.main.data.tests.results[i].acceptable + ' fontSize ' + mp.main.data.tests.results.fontSize + ' paddingSides: ' + mp.main.data.tests.results.padding);
        }    
        }
    }

}


var Load;
if (window.attachEvent) {
 Load =function ( elem, event, handler ) {
      elem.attachEvent( 'on'+event, function load() { 
        handler();
        elem.detachEvent( 'on'+event, load );
     });
 };
} else {
 Load =function ( elem, event, handler ) {
    elem.addEventListener( event, function load() { 
        handler();
        elem.removeEventListener( event, load, false );
    }, false);
 };
}

Load(window, 'load', function() { 
var MP = new MyProgram();
MP.main.test();
});

Upvotes: 0

Views: 82

Answers (1)

6502
6502

Reputation: 114461

You are simply printing

mp.main.data.tests.results.fontSize

instead of

mp.main.data.tests.results[i].fontSize

The code is correct for acceptable but you forgot the [i] part for fontSize and padding.

Upvotes: 2

Related Questions