javascript - 本地存储中的值被替换而不是更新
问题描述
我已经创建了这个电话簿站点,它现在存储用户的姓名和电话号码。现在我碰壁了,如果我插入用户数据(姓名和电话号码),它会将其推送到电话簿数组,当我尝试推送另一个用户时,它会替换第一个用户而不是更新数组。
这是我的 JavaScript 代码:
"use strict";
let myStorage = window.localStorage;
function showOverlay(showButton, showContainer) { // this whole funciton opens up the overlay
const addButton = document.querySelector("." + showButton);
addButton.addEventListener("click", function addSomthing() {
document.querySelector("." + showContainer).style.display = 'block';
});
}
showOverlay("addBtn", "formContainer");
function cancelOverlay(cancelButton, showContainer) { //this dynamic funciton helps with closing overlays after we are done with the event
const removeOverlay = document.querySelector("." + cancelButton);
removeOverlay.addEventListener("click", function removeSomthing() {
document.querySelector("." + showContainer).style.display = 'none';
});
}
cancelOverlay("cancelOverlay", "formContainer");
function inputAndOutput() {
cancelOverlay("submitButton", "formContainer"); //this function helps me close the form window after i click on send
const form = document.getElementById("addForm");
form.addEventListener("submit", (e) => { //this is a submit event when the send button is pressed it makes an object and with the help of JSON it puts it into an array
let formOutput = {
name: document.getElementById("name").value,
phoneNumber: document.getElementById("phone").value
} //end of form
myStorage.setItem("formOutput", JSON.stringify(formOutput)); //array of obj
console.log(myStorage.getItem('formOutput')); //testing
displayOutput();
e.preventDefault(); //prevent the page to reload
} //end of Event
, );
}
inputAndOutput();
let phoneArray = [100];
function displayOutput() {
if (myStorage.getItem('formOutput')) {
let { name, phoneNumber } = JSON.parse(myStorage.getItem('formOutput'));
const output = document.getElementById("outPutContainer");
phoneArray.push(output.innerHTML =
`
<ul>
<li>${name} </li>
<li>${phoneNumber} </li>
</ul>
<br>
`);
}
}
解决方案
当您提交表单时,您只是用新的替换本地存储项,而不是您必须从存储中获取值并将其存储在一个变量中,然后将新值添加到同一个变量并将该变量推送到存储。有些是这样的:
form.addEventListener("submit", (e) => { //this is a submit event when the send button is pressed it makes an object and with the help of JSON it puts it into an array
let formOutput = {
name: document.getElementById("name").value,
phoneNumber: document.getElementById("phone").value
} //end of form
//HERE
const oldData = JSON.parse(myStorage.getItem("formOutput"));
oldData.push(formOutput); // I believe its an array
myStorage.setItem("formOutput", JSON.stringify(oldData)); //array of obj
console.log(myStorage.getItem('formOutput')); //testing
displayOutput();
e.preventDefault(); //prevent the page to reload
} //end of Event
, );
推荐阅读
- vba - 从 Excel - 使用 VBA 代码满足条件时发送电子邮件提醒
- android - AppSync 示例应用程序中未生成片段
- vue.js - 按 id 返回文章——vue 路由器,vuex
- javascript - 在 Quill Rich Editor 中包含标题
- vb.net - 在vb中按降序报告项目
- html - 当数据库中的值发生更改(Codeigniter)时,如何刷新页面的一部分?
- primefaces - 简单模式下的 p:fileUpload 返回空指针错误
- javascript - 如何最好地显示活动的当地时间?
- java - java - 如何在java中嵌套方法以强制用户使用嵌套名称?
- flutter - 在 Positioned 小部件问题中使用 RaisedButton 小部件