3.9 使用多级条件
有时候,在一个条件测试中需要两个以上的选择;then和else有时候是不够的。尽管可以嵌套if语句,但更简单的方法常常是使用switch/case语句。switch/ case构造允许针对多个值检查一个变量。如图3-7所示,这个脚本根据用户点击的按钮,在警告对话框中返回三段不同的总统语录之一。脚本3-11是HTML,这相当简单。脚本3-12是JavaScript,它使用switch/case构造区分不同的总统。
脚本3-11 这段HTML建立多级条件的页面
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Switch/Case handling</title>
<script language="Javascript" type="text/javascript" src="script09.js">
</script>
</head>
<body bgcolor="#FFFFFF">
<h2>Famous Presidential Quotes</h2>
<form action="#">
<input type="button" value="Lincoln" />
<input type="button" value="Kennedy" />
<input type="button" value="Nixon" />
</form>
</body>
</html>
脚本3-12 这种条件语句允许针对多种可能性进行检查
window.onload = initAll;
function initAll() {
for (var i=0; i< document.forms[0].elements.length; i++) {
var thisElement = document.forms[0].elements[i];
if (thisElement.type == "button") {
thisElement.onclick = saySomething;
}
}
}
function saySomething() {
switch(this.value) {
case "Lincoln":
alert("Four score and seven years ago...");
break;
case "Kennedy":
alert("Ask not what your country can do for you...");
break;
case "Nixon":
alert("I am not a crook!");
break;
default:
}
}
使用switch/case语句的步骤如下:
(1) window.onload = initAll;
当装载页面时,调用initAll()函数。
(2) function initAll() {
for (var i=0; i< document.forms[0].elements.length; i++) {
var thisElement = document.forms[0].elements[i];
if (thisElement.type == "button") {
thisElement.onclick = saySomething;
}
在这个函数中,我们循环遍历页面表单中的所有字段。对于每个字段,循环会查看字段的类型。如果类型是按钮,那么就添加一个调用saySomething()函数的onclick处理程序。
(3) function saySomething() {
这一行开始saySomething()函数。
(4) switch(this.value) {
this对象的值用作switch()的参数。这个值将决定执行以下case语句中的哪一个。
(5) case "Lincoln":
alert("Four score and seven years ago...");
break;
如果this对象的值是Lincoln,那么显示这个警告消息。如果用户点击Lincoln,那么我们就会进入这里的代码。但是,在这里已经执行了我们需要的操作,所以我们希望离开这个switch语句。为此,需要使用break语句。如果没有break,就会继续执行下面的所有代码。尽管在某些情况下继续执行下面的分支是我们需要的效果,但是在这个示例中不应该这么做。
(6) case "Kennedy":
alert("Ask not what your country can do for you...");
break;
如果用户点击Kennedy,就会进入这个case块。
(7) case "Nixon":
alert("I am not a crook!");
break;
最后,如果用户点击Nixon,就会进入这里,这里弹出另一个警告对话框,然后退出switch语句。
(8) default:
如果用户的输入与上面的条件都不匹配,那么就会执行这里的代码。也就是说,如果switch值与任何case值都不匹配,就会进入default部分。default块是可选的,但是包含default块是一种好习惯,可以以防万一。在这个脚本中,这里没有要执行的代码,因为我们应该不可能进入default部分。
(9) }
这个后花括号结束switch语句。
ü提示
q 也可以向switch语句传递字符串之外的其他值。可以在switch语句中使用数字值,甚至对数学计算的结果进行评估。但是,如果结果应该是数字,那么要确保case语句是匹配的——case语句应该检查数字,而不是字符串(例如5,而不是“5”)。







