未捕获的TypeError:无法读取HTMLButtonElement.ctrlAddItem(app.js:110)处Object.addItem(app.js:38)处未定义的属性'length'

时间:2019-07-13 18:38:20

标签: javascript

请帮助

我的代码在chrome中出现错误:.length属性未定义。 而且push是undefined属性 在Firefox中:TypeError:data.allItems [type]未定义

我不明白是什么问题。

我将提供我的GitHub存储库链接,请检查app.js文件。

https://github.com/ammubhardwaj4/problem-budgety-app

未捕获的TypeError:无法读取未定义的属性'length'     在Object.addItem(app.js:38)     在HTMLButtonElement.ctrlAddItem(app.js:110) 在镀铬中 在Firefox中 TypeError:data.allItems [type]未定义

//预算控制员

var budgetController =(function(){

var Expense = function (id, description, value) {
    this.id = id;
    this.description = description;
    this.value = value;
};

var Income = function (id, description, value) {
    this.id = id;
    this.description = description;
    this.value = value;
};

var data = {
    allItems: {
        exp: [],
        inc: []
    },
    totals: {
        exp: 0,
        inc: 0
    }
};


return {
    addItem: function(type, des, val) {
        var newItem, ID;

        //[1 2 3 4 5], next ID = 6
        //[1 2 4 6 8], next ID = 9
        // ID = last ID + 1

        // Create new ID
        if (data.allItems[type] && data.allItems[type].length > 0) {
            ID = data.allItems[type][data.allItems[type].length - 1].id + 1;
        } else {
            ID = 0;
        }

        // Create new item based on 'inc' or 'exp' type
        if (type === 'exp') {
            newItem = new Expense(ID, des, val);
        } else if (type === 'inc') {
            newItem = new Income(ID, des, val);
        }

        // Push it into our data structure
        if (data.allItems[type]) {
             data.allItems[type].push(newItem);
        }
        else
        {
            return false;
        }


        // Return the new element
        return newItem;
    },

    testing: function() {
        console.log(data);
    }
};

})();

// UI控制器

var UIController =(function(){

var DOMStrings = {
    inputType: '.add__type',
    inputDescription: '.add__description', 
    inputValue: '.add__value',
    inputBtn: '.add__btn'
};

return {
    getInput : function () {
        return {
            type: document.querySelector(DOMStrings.inputType).value, // Will be either inc or exp
            description: document.querySelector(DOMStrings.inputDescription).value,
            value: document.querySelector(DOMStrings.inputValue).value,
        };
    }, 

    getDOMString : function () {
        return DOMStrings;
    }
};

})();

//全局控制器

var controller =(function(budgetCtrl,UICtrl){

var setupEventListner = function() {
    var DOM = UICtrl.getDOMString();
    document.querySelector(DOM.inputBtn).addEventListener('click', ctrlAddItem);
    document.addEventListener('keypress', function(event){
    if (event.keyCode == 13 || event.which == 13)
     {
        ctrlAddItem();
     }
        });
};

var ctrlAddItem = function() {
    var input, newItem;
    // 1. Get the field input data.
     input = UICtrl.getInput();
    // 2. Add the item to the budget controller.
        newItem = budgetCtrl.addItem(input.type, input.description, input.value);
    // 3. Add the item to the UI.

    // 4. Calculate the budget.

    // 5. Display the budget on the UI.


};

return {
    init: function() {
        console.log('Application has started.');
        setupEventListner();
    }
};

})(budgetController,UIController);

controller.init();

0 个答案:

没有答案