javascript - 如何使用本地存储值填充多个 HTML DOM 元素
问题描述
当点击事件发生时,我想在最后一个<div>
元素中显示内容,但现在它只显示第一个 2 个元素。有什么我没有做对的地方吗?
- 到目前为止,这是我的代码:
JS
const iname = document.getElementById("name");
const iemail = document.getElementById("email");
const iphone = document.getElementById("phone");
const submit = document.getElementById("submit");
const storage = document.getElementById("storage");
submit.onclick = function () {
const name = iname.value;
const email = iemail.value;
const phoneno = iphone.value;
if (name && email && phoneno) {
localStorage.setItem(name, "");
localStorage.setItem(email, "");
localStorage.setItem(phoneno, "");
location.reload();
}
};
for (let i = 0; i < localStorage.length; i++) {
const key = localStorage.key(i);
const value = localStorage.getItem(key);
storage.innerHTML += `Name : ${key}<br />Email : ${value}`;
}
localStorage.clear()
HTML
<p>Name</p>
<input id="name" autocomplete="off">
<p>Email</p>
<input id="email" autocomplete="off">
<p>Phone no</p>
<input id="phone" autocomplete="off">
<button id="submit">Let's go</button>
<div id="storage" class="box">
<h1>Is this correct?</h1></div>
解决方案
我认为您以localstorage
错误的方式设置值。
在那里存储东西的语法是localstorage.setItem(keyName, keyValue)
. 并且您的代码将参数设置为keyName
您从表单和 keyValue
参数中获得的值,并将其设置为空字符串;不是你需要的。
进行以下更改,您应该一切顺利(请参阅评论):
submit.onclick = function () {
const name = iname.value;
const email = iemail.value;
const phoneno = iphone.value;
if (name && email && phoneno) {
// set local storage values
localStorage.setItem("name", name); // modified
localStorage.setItem("email", email); // modified
localStorage.setItem("phoneno", phoneno); // modified
location.reload();
}
console.log(localStorage); // new (maybe unnecessary)
};
for (let i = 0; i < localStorage.length; i++) {
const key = localStorage.key(i);
const value = localStorage.getItem(key);
storage.innerHTML += `${upFirst(key)}: ${value}<br>`; // modified
}
localStorage.clear();
/**
* new: making the first letter an upper case (for labels in the output div).
* See usage in 'for loop' above.
*/
function upFirst(stringValue) {
return stringValue.slice(0, 1).toUpperCase() + stringValue.slice(1);
}
推荐阅读
- c++ - 在模板中使用 vector::erase 时将 const 迭代器作为 'this' 参数传递会丢弃限定符
- typescript - Svelte 组件作为对象属性
- python-3.x - 将 SECRET_KEY 放入 .env 文件中的填充错误不正确
- java - 无法使用 NTriples (OWLAPI) 保存本体
- html - 在 iOS 应用程序中使用 XSLT 样式表从 XML 生成 HTML
- c# - InvalidOperationException:尚未为“/Views/_ViewImports.cshtml”处的页面调用 RenderBody。忽略调用 IgnoreBody()
- android - 在不使用 ADB 的情况下通过 USB 将数据从 Android 发送到 Windows
- java - 带有空正文响应的问题改造 Post API
- .net - 如何让应用程序在 WinPE 中运行?
- python - 当用户@the bot 时,Discord.py bot 不读取