function upgrade(cost, hps, htmlName, id)
{
/* calc new cost based on quantity currently has */
var currUpgradeCost = Math.floor(cost * Math.pow(1.1,upgradeCount[id]));
/* can they afford it? */
if(totalHacks >= currUpgradeCost)
{
/* tally up THIS UPGRADE */
upgradeCount[id]++;
/* total the upgrades as a whole */
totalUpgrades = totalUpgrades + hps;
/* subtract this cost fro the total hacks so far */
totalHacks = totalHacks - currUpgradeCost;
/* update the HTML */
document.getElementById('hpc').innerHTML = totalUpgrades.toFixed(1);
document.getElementById('totalHacks').innerHTML = totalHacks.toFixed(0);
};
/* calc/display cost for next upgrade */
var nextCost = Math.floor(cost * Math.pow(1.1,upgradeCount[id]));
document.getElementById(htmlName).innerHTML = nextCost;
};
<button onclick="upgrade(15, .1,'upgradePCCost', 0)">Upgrade System</button>
- Cost <span id="upgradePCCost">15</span><br/>
<button onclick="upgrade(100, .5,'scriptBotCost', 1)">Script Bot</button>
- Cost <span id="scriptBotCost">100</span><br/>
编辑:全功能:(是的,可以通过点击游戏来学习JS。)如果能够解决问题,我会采取反对票。这两部分给我提出了问题。
/编辑
好的,希望我把这个变得简单而重要。主要问题 - 它有效,它只为NaN
提供targetId
错误。
现在我到处读书,我发现了几件事。
elementById
。 这都是一个大项目,为避免冗余代码,它基于他们点击的按钮,所以我只是将它添加到该功能。唯一不起作用的行是上面的那一行:elementById
。我的调试器没有显示任何错误,html只是继续吐出NaN
而不是444
(在此示例中)
我查过的很多网站/论坛都说这应该有用。所以我缺少一些东西。
我尝试过的一些事情:
- .toString()
- elementsByName
感谢。我很确定我在S.O.上到处检查过。确保这不是一个骗局,因为没有人用同样的结果做同样的事情(即我找到的很多因为拼写错误而被解决了 - 显然,这不是我的问题)
答案 0 :(得分:0)
这对我很有用:
<button onclick="upgrade(15, .1,'upgradePCCost', 0)">Upgrade System</button>
- Cost <span id="upgradePCCost">15</span><br/>
<button onclick="upgrade(100, .5,'scriptBotCost', 1)">Script Bot</button>
- Cost <span id="scriptBotCost">100</span><br/>
<script type="text/javascript">
function upgrade(cost, hps, htmlName, id)
{
upgradeCount = [ 1, 2, 3, 4 ];
totalHacks = 0;
/* calc new cost based on quantity currently has */
var currUpgradeCost = Math.floor(cost * Math.pow(1.1,upgradeCount[id]));
/* can they afford it? */
if(totalHacks >= currUpgradeCost)
{
/* tally up THIS UPGRADE */
upgradeCount[id]++;
/* total the upgrades as a whole */
totalUpgrades = totalUpgrades + hps;
/* subtract this cost fro the total hacks so far */
totalHacks = totalHacks - currUpgradeCost;
/* update the HTML */
document.getElementById('hpc').innerHTML = totalUpgrades.toFixed(1);
document.getElementById('totalHacks').innerHTML = totalHacks.toFixed(0);
};
/* calc/display cost for next upgrade */
var nextCost = Math.floor(cost * Math.pow(1.1,upgradeCount[id]));
document.getElementById(htmlName).innerHTML = nextCost;
};
</script>
&#13;
我已经运行了您的代码,正如您所看到的那样。如果所有值都正确,则此功能应该起作用。正如您所看到的,我添加了upgradeCount和totalHacks,因此我可以运行代码。但请记住,在你可以对阵列进行数学运算之前,你必须确保其中的所有值都是数字,否则你将得到NaN。
答案 1 :(得分:0)
如果此代码不适合您,则肯定与代码的其他部分相关。 document.getElementById函数需要字符串作为参数,并且你传递一个,所以,我不认为这是问题。类似地,您将字符串赋值给innerHTML属性也需要字符串,但传递数值不会受到影响,因为javascript会将它转换为字符串。所以,你得到NaN(不是数字)的错误与该行没有任何关系:
document.getElementById(htmlName).innerHTML = someVar;
我没有看到你修剪过的代码的其他部分,但我怀疑当你点击按钮时该函数运行,在你的例子中读取值“444”,并传递给你的“myFunction” 。可能你应该在那里寻找错误。
当你陷入困境时,问问自己经典的调试器问题,是什么证明了我的期望是我预期的方式?并找到代码中的行符合您的期望,并检查它是否以它应该的方式运行?
使用你的例子,你将“数字”传递给innerHTML属性,任何你得到NaN错误。所以,问题是,你传递的数字是多少是正确的?如果传递数字,请找到代码的那一部分。
更新:看到代码的其他部分后,看起来你的nextCost变量是NaN,所以你不能将它分配给innerHTML。
nextCost正在使用一些数学计算,这涉及成本,这是数字,考虑到onClick调用,只剩下的是upgradeCount [id]数组/对象,两者都可以,但可能是数组。所以我认为你应该看看你的代码的其他部分,它们形成了upgradeCount数组,并确保index id中的upgradeCount具有数字值。
希望它有所帮助。