Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript HTML/JS脚本中的变量未定义错误,未知_Javascript_Html - Fatal编程技术网

Javascript HTML/JS脚本中的变量未定义错误,未知

Javascript HTML/JS脚本中的变量未定义错误,未知,javascript,html,Javascript,Html,所以我正在做一个小的空闲游戏,我的一部分工作是格式化所有的数字,使它们之间有逗号(出于美观的目的)。我成功地使我的货币,能源,有了这些逗号,但我很难添加其他变量。我使用了num.tolocalString()和num.toString().replace(/\B(?=(\d{3})+(?!\d))/g,“,”方法在两个不同的场合使用 我的js代码: var energyDisp = '0'; var energy = 0; var harvestClickAmt = 1; var windmil

所以我正在做一个小的空闲游戏,我的一部分工作是格式化所有的数字,使它们之间有逗号(出于美观的目的)。我成功地使我的货币,能源,有了这些逗号,但我很难添加其他变量。我使用了
num.tolocalString()
num.toString().replace(/\B(?=(\d{3})+(?!\d))/g,“,”方法在两个不同的场合使用

我的js代码:

var energyDisp = '0';
var energy = 0;
var harvestClickAmt = 1;
var windmills = 0;
var windmillProduction = 1;
var windmillCost = 0;
var wcD = '0'; //Display for Windmill Cost
var solarPanels = 0;
 var solarProduction = 3;
var solarCost = 0;
var scD = '0'; // Display for Solar Cost
var dams = 0;
var damProduction = 20;
var damCost = 0;
var dcD = '0'; // Display for Dam Cost


function toCommas(num) {  
var c = num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
return c;

}

function harvestClick(harvestAmt) {
    energy += Math.round(harvestAmt);
    energyDisp = toCommas(energy);
    document.getElementById('energy').innerHTML = energy;
    document.getElementById('energyDisp').innerHTML = energyDisp;

}

function buyWindmill(){
windmillCost = Math.floor(40 * Math.pow(1.14,windmills));    
if(energy >= windmillCost){                                  
    windmills += 1;                                  
    energy -= windmillCost;                         
    document.getElementById('windmills').innerHTML = windmills;  
    document.getElementById('energy').innerHTML = energy;  
};
var nextCost = Math.floor(40 * Math.pow(1.14, windmills));  

};

function buySolarPanel(){
solarCost = Math.floor(600 * Math.pow(1.13,solarPanels));     
if(energy >= solarCost){                                  
    solarPanels += 1;                                  
    energy -= solarCost; 
    harvestClickAmt += 1;
    document.getElementById('solarPanels').innerHTML = solarPanels;  
    document.getElementById('energy').innerHTML = energy; 

};
var nextCost = Math.floor(600 * Math.pow(1.13, solarPanels));       
document.getElementById('solarCost').innerHTML = nextCost; 
toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
document.getElementById('harvestClickAmt').innerHTML = harvestClickAmt; 
};

function buyDam(){
damCost = Math.floor(5000 * Math.pow(1.126,dams));     
if(energy >= damCost){                                  
    dams += 1;                                  
    energy -= damCost; 
    windmillProduction *= 1.001;
    document.getElementById('dams').innerHTML = dams;  
    document.getElementById('energy').innerHTML = energy; 

};
var nextCost = Math.floor(5000 * Math.pow(1.13, dams));       
document.getElementById('damCost').innerHTML = nextCost; 
document.getElementById('damProduction').innerHTML = windmillProduction; 
};



window.setInterval(function(){

harvestClick((windmillProduction * windmills) +
(solarProduction * solarPanels) +
(damProduction * dams));
toCommas();

document.getElementById('wcD').innerHTML = windmillCost; 
    document.getElementById('scD').innerHTML = solarCost; 
    document.getElementById('dcD').innerHTML = damCost; 
    );
}, 1000);
我的HTML:

    <html>
    <link rel="stylesheet" type="text/css" href="interface.css" />

     <head>
        <body>
        <button id = "harvest" onclick="harvestClick(5)"></button>
        <br />
        <span id="energyDisp">0</span> Energy
        <br />

        <button onclick="buyWindmill()">Buy Windmill</button>
        <br />
        Windmills: <span id="windmills">0</span>
        <br />
        Cost: <span id="wcD">40</span> Energy

        <br />
        <button onclick="buySolarPanel()">Buy Solar Panel</button>
        <br />
        Increases clicking production by 1 energy.
        <br />
        Solar Panels: <span id="solarPanels">0</span>
        <br />
        Cost: <span id="scD">600</span> Energy

        <br />
        <button onclick="buyDam()">Buy Dam</button>
        <br />
        Increases windmill production by 0.1% per dam.
        <br />
        Dams: <span id="dams">0</span>
        <br />
        Cost: <span id="dcD">5,000</span> Energy







        <script type="text/javascript" src="main.js"></script>

        </body>
    </head>
</html>


0能量
购买风车
风车:0
费用:40能源
购买太阳能电池板
增加点击量1点能量。
太阳能电池板:0
成本:600能源
买坝
每坝增加风车产量0.1%。
水坝:0
费用:5000能源
我的问题?游戏中的文字没有更新。我收到这个错误:

未捕获的TypeError:无法将属性“innerHTML”设置为null 点击(main.js:27) 在main.js:79

第27行:
document.getElementById('energy')。innerHTML=energy

所以。。。我想知道为什么我会收到这个控制台错误,以及我如何能一次将逗号格式应用于许多变量并实时更新它们(当游戏运行时)。
谢谢大家!

您没有id为
energy
的元素,因此您的调用
document.getElementById('energy')
返回
null
——当您尝试访问(然后分配)
null
的属性
innerHTML
,它会导致异常

确保在某处声明或创建id为
energy
的元素-如果不确定它是否始终存在,请确保检查
文档的结果。getElementById
是否为空,例如

var energyEl = document.getElementById('energy');
if (energyEl) { 
  energyEl.innerHTML = ...
}

您没有id为
energy
的元素,因此您的调用
document.getElementById('energy')
返回
null
——当您尝试访问(然后分配)一个
null
的属性
innerHTML
,它会导致异常

确保在某处声明或创建id为
energy
的元素-如果不确定它是否始终存在,请确保检查
文档的结果。getElementById
是否为空,例如

var energyEl = document.getElementById('energy');
if (energyEl) { 
  energyEl.innerHTML = ...
}

您发布的标记不包含与
getElementById('energy')
匹配的
id=“energy”
元素。您发布的标记不包含与
getElementById('energy')匹配的
id=“energy”
元素没有问题。如果你觉得答案对你有帮助,并为将来的读者带来好处,可以考虑把答案标记为“接受”。没问题。如果你觉得答案对你有帮助,并为将来的读者带来好处,那就把答案标为“接受”。