2017-02-17 109 views
0

我试图编写一个列表,从输入表单获取值,将其存储到一个对象中,将该对象推入一个数组,将该数组字符串化,将其存储在本地存储中,从本地存储中检索,并将其张贴在一张表中。最大调用堆栈大小超出错误...我该如何解决?

我收到错误“超出最大调用堆栈大小”引用创建对象的行...我不完全确定是否要执行保存输入值的部分字段正确地转换成对象...帮助?谢谢

var table = document.getElementById("tableBody"); 

toDoArray = []; 


function buildTable(){ 
addToStorage(); 
var retrievedTaskObject = localStorage.getItem("task"); 
var parsedObject = JSON.parse(retrievedTaskObject); 
var addTheTaskName = parsedObject.taskName; 
var addTheTaskDate = parsedObject.taskDate; 
    var tableHTML = ""; 
    for(i=0; i < toDoArray.length; i++){ 
    var row = table.insertRow(0); 
    var cellName = row.insertCell(0); 
    var cellDate = row.insertCell(1); 
    var cellId = row.insertCell(2); 
    var cellCheck = row.insertCell(3); 
    cellName.innerHTML= parsedObject[i].name; 
    cellDate.innerHTML= parsedObject[i].date; 
    cellId.innerHTML = 1 + i; 
    var checkStuff = "<input type='checkbox'>"; 
    tableHTML += checkStuff; 

    } 
    document.getElementById("tableBody").innerHTML = tableHTML; 
} 

function submitForm(name,date) { 
    var taskObject = { 
    name: name, 
    date: date, 
    }; 

var addTaskName = document.getElementById("taskName").value; 
var addTaskDate = document.getElementById("dateTask").value; 
var taskSomething = submitForm(addTaskName,addTaskDate); 
    toDoArray.push(taskObject); 
    buildTable(); 
}; 

function addToStorage(){ 
    var storedArray = JSON.stringify(toDoArray); 
    localStorage.setItem("task",storedArray);} 
+2

您从函数内部调用'submitForm'(无意的,我假设)。这导致超出了调用堆栈。 –

回答

1

您正在通过调用iself中的submitForm方法来做递归。由于没有间隔条件停止递归,发生最大堆栈错误

function submitForm(name,date) { 
    var taskObject = { 
    name: name, 
    date: date, 
    }; 

var addTaskName = document.getElementById("taskName").value; 
var addTaskDate = document.getElementById("dateTask").value; 
var taskSomething = submitForm(addTaskName,addTaskDate); 
    toDoArray.push(taskObject); 
    buildTable(); 
}; 

它应该是这样的this--

function submitForm(name,date) { 
    var addTaskName = document.getElementById("taskName").value; 
    var addTaskDate = document.getElementById("dateTask").value; 
    var taskSomething = getTaskObj(addTaskName,addTaskDate); 
     toDoArray.push(taskSomething); 
     buildTable(); 
}; 

function getTaskObj(taskName,taskData){ 
var taskObject = { 
     name: taskName, 
     date: taskData, 
     }; 
return taskObject; 
} 
+0

好的,现在我得到的taskObject没有定义----我把错误的东西放在toDoArray.push()?我应该在那里提交表单吗?即时通讯有点困惑如何从窗体中采取新创建的对象与我的值,然后推入数组... –

+0

已更新的代码 – RahulB

+0

您必须将getTaskObj方法的结果推入数组,这是taskSomething代码中的数组。请使用upadated代码 – RahulB

相关问题