javascript - 页面刷新后如何保值?
问题描述
按下每个按钮后,我设法使数字上升,但刷新页面后我需要保持该值。我知道我可以使用localStorage
,但我不明白它是如何工作的。
<form>
<input type="text" id="number" value="0" />
<input type="button" onclick="incrementValue10()" value="$10" />
<input type="button" onclick="incrementValue20()" value="$20" />
<input type="button" onclick="incrementValue50()" value="$50" />
</form>
function incrementValue10() {
var value = parseInt(document.getElementById('number').value, 10);
value = isNaN(value) ? 0 : value;
value += 10;
document.getElementById('number').value = value;
}
function incrementValue20() {
var value = parseInt(document.getElementById('number').value, 10);
value = isNaN(value) ? 0 : value;
value += 20;
document.getElementById('number').value = value;
}
function incrementValue50() {
var value = parseInt(document.getElementById('number').value, 10);
value = isNaN(value) ? 0 : value;
value += 50;
document.getElementById('number').value = value;
}
解决方案
要使用 localStorage,您只需调用setItem()
以保存值并getItem
检索它。
还值得注意的是,您不应该使用onX
属性。他们是不好的做法。改为使用不显眼的事件处理程序。此外,您可以通过将单个函数附加到所有元素并通过data
每个元素上的属性改变其操作来轻松地干燥代码。像这样的东西:
let output = document.querySelector('#number');
// save the value on click of the button
document.querySelectorAll('.inc').forEach((el) => {
el.addEventListener('click', function() {
var newValue = parseFloat(output.value) + parseFloat(this.dataset.inc);
output.value = newValue;
localStorage.setItem('number', newValue);
});
});
// retrieve the value when the page loads
var oldValue = localStorage.getItem('number') || 0;
output.value = oldValue;
<form>
<input type="text" id="number" value="0" />
<input type="button" class="inc" data-inc="10" value="$10" />
<input type="button" class="inc" data-inc="20" value="$20" />
<input type="button" class="inc" data-inc="50" value="$50" />
</form>
请注意,SO 片段会阻止对 localStorage 的访问,所以这里有一个完整的jsFiddle
推荐阅读
- php - PHP if isset 问题
- javascript - 将焦点放在外部反应组件上
- python - PyQt 子部件
- android - 无法解析符号“driveService”
- mongodb - MongoDB 使用位置数组索引更新多个文档
- javascript - 如何在 Adobe Acrobat DC 中定义 JavaScript 脚本中的字符串编码
- json - SQL查询返回包含数组的Json
- c++ - c++ 控制台应用程序,如何在控制台外打印字符
- powershell - Powershell - 将 SQL 与 AD 进行比较
- r - 根据R中不同data.frame的日期间隔平均一列