所以最近我在JS中遇到了localStorage的问题。每次我按下按钮而不是向var wood;加1时,每次按下按钮,输出都会在输出的左侧加1,因此如果我按按钮3次而不是wood = 3将等于111。请帮忙。



<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p id="output"></p>
<button onclick="collectWood()">collect wood</button>
<script>
var wood = +localStorage.getItem("woodSave");

document.getElementById('output').innerHTML = parseInt(wood);
localStorage.setItem("woodSave", wood);
if(wood >= 1000){
	replace = (wood / 1000).toFixed(2) + "k";
	wood = replace;
	document.getElementById('output').innerHTML = wood;
}
function collectWood() {
	wood = wood + 1;
	document.getElementById('output').innerHTML = wood;
}
</script>
</body>
</html>

最佳答案

您的问题就在这里:

replace = (wood / 1000).toFixed(2) + "k";
wood = replace;


这里发生的是,当wood(一个数字)大于或等于1000时,您需要对数字进行一些数学运算,然后返回一个字符串,然后将该字符串重新分配给您的wood变量,因此向前,这就是存储和使用的内容。您应该只获取该replace变量的结果并将其注入到DOM中,以便用户看到格式化的输出,但是内部值保留为数字。

另外,第一次运行代码时,将不会存储任何值,因此您需要准备对其进行初始化。

最后,您需要将输出代码移至单击按钮的位置。

see this Fiddle带有注释的工作版本。

09-25 19:05