2017-02-17 5 views
0

Я пытаюсь закодировать список дел, которые принимают значения из входной формы, сохраняют ее в объекте, толкают объект в массив, строят массив, хранят его в локальном хранилище, извлекают из локального хранилища, и помещает его в таблицу.максимальный размер стека вызовов превышен ... как исправить?

Я получаю сообщение об ошибке «Максимальный размер стека вызовов» в отношении строки, в которой я создаю объект ... Я не совсем уверен, выполняю ли я часть сохранения значений из ввода поля в объект правильно ... помочь? thank you

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

Вы делаете рекурсию, вызывая метод submitForm в iself. Поскольку не существует никаких условий перерыв, чтобы остановить рекурсию, максимальная ошибка стека происходит

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

ok, теперь im get taskObject не определен ---- am Я помещаю неправильную вещь в toDoArray.push()? Должен ли я отправить форму? im немного запутался в том, как взять вновь созданный объект с моими значениями из формы, а затем нажать на массив ... –

+0

Обновлен код – RahulB

+0

Вы должны нажать результат метода getTaskObj в массив, который является taskSomething в коде. Пожалуйста, используйте обновленный код – RahulB