javascript - 我正在玩通过 JavaScript 存储用户输入的数据,需要帮助
问题描述
我正在尝试设置一个网站,将用户锻炼了多少小时存储到一个数组中,将该数组保存到用户计算机,然后在下次加载页面时将该数组记录到控制台。这是我到目前为止所拥有的,但它不起作用。有什么建议么?
// Script
init();
function init() {
if (localStorage.getItem('exerciseData') !== null && localStorage.getItem('exerciseData') !== undefined) {
exerciseData = localStorage.getItem('exerciseData');
console.log(exerciseData);
} else {
console.log('blank exercise data array');
exerciseData = [];
}
}
let x = document.createElement("INPUT");
x.setAttribute("type", "text");
x.setAttribute("value", "How long did you exercise today?");
x.size = "40";
document.body.appendChild(x);
document.write(' ');
let btn = document.createElement("BUTTON");
btn.innerHTML = "Submit";
document.body.appendChild(btn);
var exerciseData = [];
console.log('test');
btn.onclick = function () {
var date = new Date();
let day = date.getDate();
let month = date.getMonth();
let year = date.getFullYear();
exerciseData.push(`${day}/${month + 1}/${year} : ${x.value}`);
//exerciseData.push(day + '/' + (month + 1) + '/' + year + ':' + x.value);
localStorage.setItem("exerciseData", exerciseData);
}
解决方案
exerciseData
如果在调用之前将定义移到顶部,您的代码看起来会起作用init()
。
现在,[]
当您在运行后定义它时,它被一个空覆盖init()
。
另一个问题是document.createElement()
语句应该使用小写的元素名称而不是INPUT
or BUTTON
。
最后,您不能将数组存储在 中localStorage
,但可以存储字符串。因此,存储/获取数据应该使用字符串,而不是数组:
localStorage.setItem("exerciseData", JSON.stringify(exerciseData));
//...
exerciseData = JSON.parse(localStorage.getItem("exerciseData"));
推荐阅读
- reactjs - this.setState 不是函数,react-native
- android - React Native marginTop 在 TouchableOpacity 中偏移文本位置
- reactjs - 获取和会话以及 CORS
- selenium-webdriver - 如何使用量角器切换没有 id 的复选框
- laravel - Laravel 在控制器中更改 url 参数
- bash - 如何查找“/etc/passwd”中存在但“/etc/group”中不存在的组列表?
- python - Python 3 BS4 - 在指定的第一个返回
- java - 创建 mongodb 存储库中的 Spring Data 错误
- python - 在嵌套的for循环中对dict和list中的项目进行成员资格检查,而不使用集合?
- docker - 将持久卷声明添加到容器中的现有文件