Javascript returns [object HTMLSpanElement]
Javascript returns [object HTMLSpanElement]
我正在制作一个卖凤尾鱼的简单游戏。我需要升级才能买一个小渔网。渔网要花费一定数量的凤尾鱼,所以我从总数中减去这个数字,然后用innerHTML重写。我希望这个小网络每秒添加1条凤尾鱼,所以我使用window.setInterval。然而,现在每秒[object HTMLSpanElement]都被写入页面。
我该怎么办?
以下是jsfiddle链接:http://jsfiddle.net/Bj6M5/1/
这是代码:
<head>
<script type="text/javascript">
var anchovies = 0;
var money = 0;
function goFish(num) {
anchovies = anchovies + num;
money = 0.433 * anchovies;
var money_rounded;
money_rounded = money.toFixed(2);
if (anchovies != 1) {
document.getElementById("anchovies").innerHTML = anchovies + " anchovies";
}
else {
document.getElementById("anchovies").innerHTML = "1 anchovy";
}
document.title = "$" + money_rounded + " - Anchovy Bros.";
}
function buySmallNet(){
var smallnet_price = Math.floor(10 * Math.pow(1.1,smallnets));
if (anchovies >= smallnet_price) {
smallnets = smallnets + 1;
anchovies = anchovies - smallnet_price;
if (smallnets != 1) {
document.getElementById("smallnets").innerHTML = smallnets + " small nets";
}
else {
document.getElementById("smallnets").innerHTML = "1 small net";
}
document.getElementById("anchovies").innerHTML = anchovies + " anchovies";
}
else {
alert("You don't have enough anchovies!");
}
}
window.setInterval(function(){
goFish(smallnets);
}, 1000);
</script>
<title>$0 - Anchovy Bros.</title>
</head>
<body>
<button onclick="goFish(1);">FISH!</button>
<br>
<span id="anchovies"></span>
<div style="float:right;" id="upgrades">
<center>
<button onclick="buySmallNet();">small fishing net</button>
<br>
<span>costs 15 anchovies</span>
<br>
<span id="smallnets"></span>
</center>
</div>
</body>
您正在调用goFish(smallnets)
。smallnets是一个元素的id,所以您正在传递该元素。你期望goFish
中有一个数字,并进行各种计算和赋值,但这些计算和赋值显然失败了,因为它是一个元素,而不是一个数字。最后,您输出的是anchovies
,它现在被分配给了该元素,而不是计算的结果。
因此,在需要将元素转换为数字的地方缺少了一个链接,数字可能是元素的内容(即posession中的小网数量)。
原因是这一行:
goFish(smallnets);
您还没有在任何地方声明smallnets
变量,但您的标记中有一个元素id
"smallnets"
,它是span
。大多数浏览器为具有id
值的元素创建全局变量,其中变量的名称为id
,值为DOM元素。
然后在goFish
中,此行:
anchovies = anchovies + num;
是(第一次通过时):
anchovies = 0 + a_span_element;
由于span
无法合理地转换为数字,因此它被转换为字符串,即"[object HTMLSpanElement]"
。然后0
被转换成一个字符串,就得到了"0[object HTMLSpanElement]"
。
然后在下一次间隔激发时,您向其添加"[object HTMLSpanElement]"
的另一个副本,等等。
如果您的目标是使用span
的文本,则需要:
goFish(smallnets.innerHTML);
或更好的
goFish(parseInt(smallnets.innerHTML, 10));
或者更好的是,不要依赖通过id
:创建的全局
goFish(parseInt(document.getElementById("smallnets").innerHTML, 10));
您还需要在跨度中放置0
或其他东西,例如:
<span id="smallnets">0</span>