首页 > 解决方案 > 无法使用函数更改 javascript 中数组的“i”个索引的值

问题描述

我正在编写一个代码,用户将在其中看到所有问题的列表,它有两个按钮:

  1. 关闭问题
  2. 删除问题

因此,在调用 delete 函数时,它不会改变问题的状态。

close() 函数正在改变第“i”个问题的状态并调用 fetchIssues() 函数,但它没有改变状态。

关闭问题:

function close(i) {

    var issues=JSON.parse(localStorage.getItem('issues'));
    issues[i].status="Close";
    fetchissues();

}

获取问题:

function fetchIssues () {

    var issues=JSON.parse(localStorage.getItem('issues'));
    var I;
    for(i=0;i<issues.length;i++) {

        var id=issues[i].id;
        var description=issues[i].description;
        var severity=issues[i].severity;
        var assignto=issues[i].assignto;
        var status=issues[i].status;
        document.getElementById('issuesList').innerHTML += 
            '<div class="well">'+
                '<h5> Issue ID : '+ id + '</h5>' + 
                '<h4><span class="label label-info">'+ status +'</span></h4>'+
                '<h3><span class="glyphicon glyphicon-paste"></span>'+"     "+  description + '</h3>'+
                '<p><span class="glyphicon glyphicon-time"></span>'+'     '+ severity+'         '+'<span class="glyphicon glyphicon-user"></span>'+'     '+ assignto + '</p>'+
                '<button type="button" class="btn btn-success" onclick="close(i)">Close</button>'+'  '+
                '<button type="button" class="btn btn-danger" onclick="delete(i)">Delete</button>'+
            '</div>';

    }

}

保存问题:

function saveIssue(e) {

    var id=chance.guid()
    var description = document.getElementById("issueDescInput").value;
    var severity = document.getElementById("issueSeverityInput").value;
    var assignto = document.getElementById("issueAssignedToInput").value;
    var status="Open";
    var summarized = {
        id,
        description,
        severity,
        assignto,
        status
    }

    var final=JSON.stringify(summarized);
    if(localStorage.getItem('issues')===null) {

        var issues=[];
        issues.push(summarized);
        var finalissues=JSON.stringify(issues);
        localStorage.setItem('issues', finalissues);
        alert("saved");

    } else {

        var issues = JSON.parse(localStorage.getItem('issues'));
        issues.push(summarized);
        var finalissues=JSON.stringify(issues);
        localStorage.setItem('issues', finalissues);
        alert("saved");

    }
    e.preventDefault();
    fetchIssues();

}

标签: javascripthtml

解决方案


在以下函数中:

function close(i) {
   var issues=JSON.parse(localStorage.getItem('issues'));
   issues[i].status="Close";
   fetchissues();
}

您必须先将其保存到 localstorage,而不是简单地设置 issue[i].status="Close" 并期望更新 localstorage 版本,您必须设置它:

localStorage.setItem("issues", JSON.stringify(issues))

所以,你的关闭功能应该是:

function close(i) {
   var issues=JSON.parse(localStorage.getItem('issues'));
   issues[i].status="Close";
   localStorage.setItem("issues", JSON.stringify(issues));
   fetchissues();
}

还有@heretic-monkey 指出的问题:

那是因为您使用的是 HTML 字符串,而 onclick="close(i)" 不知道 i 是什么。你需要 onclick="close(' + i + ')"


推荐阅读