今天,我开始编写一个页面,提示用户选择他们的PC规格,代码如下
<html>
<title>Computer Specification Chooser</title>
<head>
<script type="text/javascript">
var compSpec = document.compChooser;
function processorUnavailable_onclick()
{
alert("Sorry that processor speed is currently unavailable");
compSpec.processor[2].checked = true;
}
</script>
</head>
<body>
<form name="compChooser">
<p>Tick all components you wan included on your computer</p>
<p>
DVD-ROM
<input type="checkbox" name="chkDVD" value="DVD-ROM" />
<br />
CD-ROM
<input type="checkbox" name="chkCD" value="CD-ROM" />
<br />
Zip Drive
<input type="checkbox" name="chkZIP" value="ZIP DRIVE" />
</p>
<p>
Select the processor speed you require
<br />
<input type="radio" name="processor" value="3.8" />
3.8 GHZ
<input type="radio" name="processor" value="4.8" onclick="processorUnavailable_onclick()" />
4.8 GHZ
<input type="radio" name="processor" value="6" />
6 GHZ
</p>
<input type="button" name="btnCheck" value="Check Form" />
</form>
</body>
</html>
我面临的问题是我与事件处理程序绑定的功能,当我尝试选择处理器值为4.8 GHZ的单选按钮时,是的它提醒我函数内部的消息,但是之后,它不会执行函数内的下一个语句,即检查下一个处理器值为6 GHZ。
我已经尝试改变它并对其进行测试,并找出当我将var compSpec = document.compChooser
设置为函数内的局部变量而不是全局变量时,可以执行下一个语句。 / p>
但是我想一个全局变量,它可以在页面的任何地方访问,也可以在函数内部访问。但是为什么现在我无法在我的函数中访问它?任何想法?
此外,我在google搜索时偶然发现了一篇奇怪的文章,它说当创建一个全局变量时,它会被添加到window对象中。我只是好奇为什么会发生这种情况?它有什么好处和用途?< / p>
谢谢你
答案 0 :(得分:2)
在javascript中,全局变量是全局对象的属性。在浏览器中运行时,全局对象是window
对象。因此,如果您不使用var
关键字,则实际上并未声明变量,而是设置window
对象的属性。它很有用,因为window
对象可以从任何地方访问,您的全局变量也是如此。
如果在compSpec
函数中将var
声明为变量(processorUnavailable_onclick
),则其范围将仅限于该函数(以及在其中创建的闭包)。如果将compSpec
设置为全局变量(即window
的属性),那么它将随处可用:
function body_onload()
{
window.compSpec = document.compChooser;
}
function processorUnavailable_onclick()
{
alert("Sorry that processor speed is currently unavailable");
window.compSpec.processor[2].checked = true;
}
...<body onload="body_onload()">...
答案 1 :(得分:1)
您的问题就在这一行:compSpec = document.compChooser
当此代码运行时,表单还不是DOM的一部分,因此compSpec未定义。 将代码放在文档末尾或在onload处理程序中运行它就可以了。