javascript - 超出最大调用堆栈大小错误...我该如何修复?

标签 javascript arrays json object local-storage

我正在尝试编写一个待办事项列表,该列表从输入表单中获取值,将其存储到一个对象中,将对象插入数组中,对数组进行字符串化,将其存储在本地存储中,从本地存储中检索,并将其发布到表格中。

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

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

最佳答案

您正在通过调用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();
};

应该是这样的——

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

关于javascript - 超出最大调用堆栈大小错误...我该如何修复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42291145/

相关文章:

javascript - 如何在 Django ajax 更新中返回 json 字典

javascript - 将数据从 Controller 传递到指令

javascript - 如何使用 JavaScript 从动态存储数据的网站获取跨度值

javascript - react /Redux : Where to put jQuery event handlers in component awaiting async data

python - 在 Python 中过滤数组中的 Anagram

arrays - 为什么 each_cons 产生数组而不是多个值?

php - 使用 PHP 从 MYSQL 获取数据到 JSON

javascript - 如何隐藏\显示ddl中的项目

Java |通过 FOR 循环返回一个颠倒的数组

c# - 使用 JSON.NET 实现自定义日期时间转换器