【问题标题】:maximum call stack size exceeded error... how do I fix?超出最大调用堆栈大小错误...我该如何解决?
【发布时间】:2017-07-06 13:54:07
【问题描述】:

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

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

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

【问题讨论】:

  • 您正在从函数本身内部调用submitForm(我猜是无意的)。这导致超出调用堆栈。

标签: javascript arrays json object local-storage


【解决方案1】:

您正在通过调用自身的 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;
}

【讨论】:

  • 好的,现在我得到 taskObject 没有定义----我在 toDoArray.push() 中放错东西了吗?我应该在那里提交表单吗?我对如何从表单中获取新创建的对象和我的值有点困惑,然后推入数组...
  • 您必须将 getTaskObj 方法的结果推送到代码中的 taskSomething 数组中。请使用更新的代码
猜你喜欢
  • 1970-01-01
  • 2011-08-31
  • 1970-01-01
  • 2019-09-04
  • 2019-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-20
相关资源
最近更新 更多