javascript - 无法使用函数更改 javascript 中数组的“i”个索引的值
问题描述
我正在编写一个代码,用户将在其中看到所有问题的列表,它有两个按钮:
- 关闭问题
- 删除问题
因此,在调用 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();
}
解决方案
在以下函数中:
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 + ')"
推荐阅读
- python-3.x - ValueError:必须是坐标对或点
- c# - 是否可以从来自 webjob 的 webapp 获取环境变量
- drupal - 如何使用 drupal 8 设置 Airbrake
- java - 构建 Apache Ambari 失败:连接被拒绝
- c++ - 将 int 128 除法提升为浮点数
- excel - 作为可选参数的范围应默认为调用单元格的完整工作表。如何?
- php - 如何在 PHP 中获取和生成重复数字(子集)数组
- oauth-2.0 - wso2 身份服务器联合身份验证与 keycloak 集成,并使用 keycloak 向发布者进行身份验证
- c# - 获取选中框列表文本
- node.js - 在类型上找不到带有“字符串”类型参数的索引签名