Javascript 为什么我的收入和支出名称未定义?

Javascript 为什么我的收入和支出名称未定义?,javascript,html,dom,Javascript,Html,Dom,当我在收入/支出的描述框中输入任何名称时,该名称将添加到用户界面,但显示“未定义”而不是添加的描述。例如,如果我输入“salary”,那么它将显示“undefined”。我只是一个初学者,正在学习Web开发。请帮帮我。 我的HTML和JavaScript代码如下- var预算控制器=(函数(){ var费用=功能(id、说明、值){ this.id=id; 本说明=说明; 这个值=值; }; var收入=功能(id、说明、值){ this.id=id; 本说明=说明; 这个值=值; }; 风险

当我在收入/支出的描述框中输入任何名称时,该名称将添加到用户界面,但显示“未定义”而不是添加的描述。例如,如果我输入“salary”,那么它将显示“undefined”。我只是一个初学者,正在学习Web开发。请帮帮我。 我的HTML和JavaScript代码如下-

var预算控制器=(函数(){
var费用=功能(id、说明、值){
this.id=id;
本说明=说明;
这个值=值;
};
var收入=功能(id、说明、值){
this.id=id;
本说明=说明;
这个值=值;
};
风险值数据={
allItems:{
exp:[],
公司:[]
},
总数:{
实验:0,
公司:0
}
};
返回{
附加项:函数(类型、des、val){
var newItem,ID;
if(data.allItems[type].length>0){
ID=data.allItems[type][data.allItems[type].length-1].ID+1;
}否则{
ID=0;
}
如果(类型=='exp'){
新项目=新费用(ID、des、val);
}else if(类型==='inc'){
新项目=新收入(ID、des、val);
}
data.allItems[type].push(newItem);
返回新项目;
},
//测试目的
测试:函数(){
控制台日志(数据);
}
};
})();
//用户界面控制器
var UIController=(函数(){
var DOMstrings={
输入类型:'.添加类型',
inputDescription:'。添加描述',
inputValue:'。添加值',
inputButton:'.添加'',
incomeContainer:“.收入清单”,
费用容器:“.费用清单”,
};
返回{
getInput:function(){
返回{
类型:document.querySelector(DOMstrings.inputType).value,//inc或exp
说明:document.querySelector(DOMstrings.inputDescription).value,
值:document.querySelector(DOMstrings.inputValue).value
};
},
addListitem:函数(对象,类型){
var-html,newHtml,元素;
//创建带有占位符文本的HTML字符串
如果(类型=='inc'){
element=domastrings.incomeContainer;
html=“%description%%value%”;
}else if(type==='exp'){
元素=DOMstrings.expensesContainer;
html=“%description%%值%21%”;
}
//用一些实际数据替换占位符文本
newHtml=html.replace(“%id%”,obj.id);
newHtml=newHtml.replace(“%description%”,obj.description);
newHtml=newHtml.replace(“%value%”,obj.value);
//将HTML插入DOM
document.querySelector(element.insertAdjacentHTML('beforeend',newHtml);
},
getDOMstrings:function(){
返回字符串;
}
};
})();
//控制器
变量控制器=(函数(budgetCtrl、UICtrl){
var setupEventListeners=函数(){
var DOM=UICtrl.getDOMstrings();
document.querySelector(DOM.inputButton).addEventListener('click',ctrlAddItem);
document.addEventListener('keypress',函数(事件){
if(event.keyCode==13 | | event.which==13){
ctrlAddItem();
}
});
};
var ctrlAddItem=函数(){
var输入,newItem;
//获取字段输入数据
input=UICtrl.getInput();
//将项目添加到预算控制器
newItem=budgetCtrl.addItems(input.type,input.description,input.value);
//将项目添加到UI
UICtrl.addListitem(newItem,input.type);
//计算预算
//在UI上显示预算
};
返回{
init:function(){
//测试目的
log('hello');
setupEventListeners();
}
};
})(预算控制器,UIController);
controller.init()

%Month%中的可用预算:
+ 2,345.64
收入
+ 4,300.00
费用
- 1,954.36
45%
+
-
收入
费用
您在以下方面有输入错误:

getInput: function() {
      return {
        type: document.querySelector(DOMstrings.inputType).value, // inc or exp
        description: document.querySelector(DOMstrings.inputDescription).value,
//________^ The s is missing
        value: document.querySelector(DOMstrings.inputValue).value
      };
},
你在混合描述和描述,保持一致

var预算控制器=(函数(){
var费用=功能(id、说明、值){
this.id=id;
this.description=描述;
这个值=值;
};
var收入=功能(id、说明、值){
this.id=id;
this.description=描述;
这个值=值;
};
风险值数据={
allItems:{
exp:[],
公司:[]
},
总数:{
实验:0,
公司:0
}
};
返回{
附加项:函数(类型、des、val){
var newItem,ID;
if(data.allItems[type].length>0){
ID=data.allItems[type][data.allItems[type].length-1].ID+1;
}否则{
ID=0;
}
如果(类型=='exp'){
新项目=新费用(ID、des、val);
}else if(类型==='inc'){
新项目=新收入(ID、des、val);
}
data.allItems[type].push(newItem);
返回新项目;
},
//测试目的
测试:函数(){
控制台日志(数据);
}
};
})();
//用户界面控制器
var UIController=(函数(){
var DOMstrings={
输入类型:'.添加类型',
inputDescription:'。添加描述',
inputValue:'。添加值',
inputButton:'.添加'',
incomeContainer:“.收入清单”,
费用容器:“.费用清单”,
};
返回{
getInput:function(){
返回{
类型:document.querySelector(DOMstrings.inputType).value,//inc或exp
说明:document.querySelector(DOMstrings.inputDescription).value,
值:document.querySelector(DOMstrings.inputValue).value
};
},
addListitem:函数(对象,类型){
var-html,newHtml,元素;
//创建带有占位符文本的HTML字符串
如果(类型=='inc'
newItem = budgetCtrl.addItems(input.type, input.description, input.value);