JavaScript错误,推送不是一个功能

时间:2018-06-02 18:54:35

标签: javascript function push

我刚开始学习JavaScript。我创建了一个保存函数来将数据保存到本地存储,但每次我尝试保存数据时,它总是会收到此错误:push不是函数。

这段代码中出现错误:

var issues = JSON.parse(localStorage.getItem('issues'));
issues.push(issue);

我试图从本地存储中获取数据。 var问题应该是一个对象数组,所以我可以将另一个对象推入其中。

这是完整的代码:

function fetchIssues () {
  var issues = JSON.parse(localStorage.getItem('issues'));
  var issuesList = document.getElementById('issuesList');

  issuesList.innerHTML = '';

  for (var i = 0; i < issues.length; i++) {
    var id = issues[i].id;
    var desc = issues[i].description;
    var severity = issues[i].severity;
    var assignedTo = issues[i].assignedTo;
    var status = issues[i].status;

    issuesList.innerHTML +=   '<div class="well">'+
    '<h6>Issue ID: ' + id + '</h6>'+
    '<p><span class="label label-info">' + status + '</span></p>'+
    '<h3>' + desc + '</h3>'+
    '<p><span class="glyphicon glyphicon-time"></span> ' + severity + ' '+
    '<span class="glyphicon glyphicon-user"></span> ' + assignedTo + '</p>'+
    '<a href="#" class="btn btn-warning" onclick="setStatusClosed(\''+id+'\')">Close</a> '+
    '<a href="#" class="btn btn-danger" onclick="deleteIssue(\''+id+'\')">Delete</a>'+
    '</div>';
  }
}

document.getElementById('issueInputForm').addEventListener('submit', saveIssue);

function saveIssue(e) {
  var issueId = chance.guid();
  var issueDesc = document.getElementById('issueDescInput').value;
  var issueSeverity = document.getElementById('issueSeverityInput').value;
  var issueAssignedTo = document.getElementById('issueAssignedToInput').value;
  var issueStatus = 'Open';
  var issue = {
    id: issueId,
    description: issueDesc,
    severity: issueSeverity,
    assignedTo: issueAssignedTo,
    status: issueStatus
  }

  if (localStorage.getItem('issues') === null) {
    var issues = [];
    issues.push(issue);
    localStorage.setItem('issues', JSON.stringify(issues));
  } else {
    var issues = JSON.parse(localStorage.getItem('issues'));
    issues.push(issue);
    localStorage.setItem('issues', JSON.stringify(issues));
  }

  document.getElementById('issueInputForm').reset();

  fetchIssues();

  e.preventDefault(); 
}

function setStatusClosed (id) {
  var issues = JSON.parse(localStorage.getItem('issues'));

  for(var i = 0; i < issues.length; i++) {
    if (issues[i].id == id) {
      issues[i].status = "Closed";
    }
  }

  localStorage.setItem('issues', JSON.stringify(issues));

  fetchIssues();
}

function deleteIssue (id) {
  var issues = JSON.parse(localStorage.getItem('issues'));

  for(var i = 0; i < issues.length; i++) {
    if (issues[i].id == id) {
      issues.splice(i, 1);
    }
  }

  localStorage.setItem('issues', JSON.stringify(issues));

  fetchIssues();
}

1 个答案:

答案 0 :(得分:0)

您还没有考虑到该存储密钥中没有设置任何内容的情况。

尝试更改:

var issues = JSON.parse(localStorage.getItem('issues'));

var issues = JSON.parse(localStorage.getItem('issues') || '[]');

如果getItem('issues')为空或空

,这将返回一个空数组

我建议你将它包装在辅助函数中并替换你调用JSON.parse(getItem)的多个实例