我尝试使用javascript创建一个简单的程序,它将计算在文本字段中输入的两个数字的总和和平均值。
<script>
var a=parseInt(document.getElementById("text1").value);
var b=parseInt(document.getElementById("text2").value);
function sum()
{
var result = document.getElementById("valueofsum");
var sum=a+b;
result.innerHTML = sum;
}
function average()
{
var result = document.getElementById("valueofavg");
var avg=(a+b)/2;
result.innerHTML = avg;
}
function reset()
{
document.getElementById("text1").value = "";
document.getElementById("text2").value = "";
document.getElementById("valueofsum").innerHTML = "";
document.getElementById("valueofavg").innerHTML = "";
}
</script>
从文本字段读取值的两个变量是全局声明的,并初始化为“a”和“b”。 总和和平均值以NaN(NotaNumber)而不是计算结果返回。
如果我使用/声明函数内部的变量作为局部变量,代码似乎工作正常,这让我想知道javascript中全局变量的范围?
答案 0 :(得分:2)
当您加载页面时,您正在读取输入中的值(此时它们可能是空字符串)。
如果要在sum
或average
函数运行时(即在用户输入内容后)获取值,则需要在时获取值这些功能运行。
请参阅以下代码示例:
function sum() {
var a=parseInt(document.getElementById("text1").value);
var b=parseInt(document.getElementById("text2").value);
var result = document.getElementById("valueofsum");
var sum=a+b;
result.innerHTML = sum;
}
答案 1 :(得分:1)
你没有提供任何HTML代码,所以我猜你已经把你的脚本放在你的页面的开头,然后HTML代码跟在它之后导致你的代码在创建DOM之前运行,因此没有&#34; text1& #34;和&#34; text2&#34;元素实际上存在于那一点。
当你把它们放在函数中时,你只需避免上述问题,因为我怀疑你在页面的末尾执行这些函数,或者在某处使用任何onClick事件。
如果情况并非如此,请提供有关页面结构的更多信息。
答案 2 :(得分:1)
您在全局范围内获取值,并且在执行这些行时,值为空。您需要在全局范围内获取字段引用以避免重复,但在副函数中获取值。
<script>
var a = document.getElementById("text1");
var b = document.getElementById("text2");
function sum()
{
var result = document.getElementById("valueofsum");
var sum = parseInt(a.value) + parseInt(b.value);
result.innerHTML = sum;
return sum;
}
function average()
{
var result = document.getElementById("valueofavg");
var avg= sum()/2;
result.innerHTML = avg;
return avg;
}
function reset()
{
document.getElementById("text1").value = "";
document.getElementById("text2").value = "";
document.getElementById("valueofsum").innerHTML = "";
document.getElementById("valueofavg").innerHTML = "";
}
</script>