1.7实例:使用JavaScript验证HTML表单数据
1.7 实例:使用JavaScript验证HTML表单数据
本章介绍的重点内容是HTML、CSS、JavaScript和PHP环境的搭建,其中HTML、CSS及JavaScript的相关内容又是Web开发最基础的知识,掌握这方面的内容对Web开发至关重要。因为在HTML、CSS和JavaScript三者之间,JavaScript是比较难掌握的,所以,本节以一个JavaScript的应用为实例,作为对Web开发基础知识的一个总结。
这个JavaScript实例是用来验证HTML表单数据的简单程序。任何一个Web应用都离不开数据的提交和处理,这些数据要么被应用程序直接使用,要么被应用程序存入数据库。无论哪种情况,都应该保证浏览器端所提交数据的有效性和正确性。这就要求服务器端程序在处理数据之前,先对HTML表单所提交的数据进行合法性验证,以保证应用程序执行正常,或者保证存入数据库的数据完整有效。
通常,需要验证的项包括数据长度是否满足、字符是否合乎需求(如只能为数字或只能为英文字母等),还有对一些特定格式的验证,如对E-mail地址的验证、对URL的验证和对IP地址的验证等。验证可以在服务器端由应用程序完成,或者在浏览器端由JavaScript完成,本节将介绍后一种验证方式。
(1)建立一个HTML页面,该页面由一些表单元素组成,当这个表单被提交时,将由这个页面中内嵌的JavaScript程序完成对这些元素值的验证。HTML文档如代码1-4所示。
代码1-4 一个含有表单元素的Web页面1-37.html
01 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
02 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
03 <html xmlns="http://www.w3.org/1999/xhtml">
04 <head>
05 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
06 <title>1-37.html -
使用JavaScript
验证HTML
表单数据</title>
07
08 <script language="JavaScript" src="1-38.js">
09 </script>
10
11 </head>
12 <body>
13 <h1>
使用JavaScript
验证HTML
表单提交数据</h1>
14 <br/>
15 <br/>
16 <form id="fdata" name="fdata" method="post" action="" onsubmit="return checkForm()">
17 <table width="476" height="154" border="1" cellpadding="1" cellspacing="0">
18 <tr>
19 <td width="254"><div >
请只输入数字(长度小于10
):</div></td>
20 <td width="212"><label>
21 <input type="text" name="num" />
22 </label></td>
23 </tr>
24 <tr>
25 <td><div >
请只输入英文字母:</div></td>
26 <td><label>
27 <input type="text" name="al" />
28 </label></td>
29 </tr>
30 <tr>
31 <td><div >
请做选择:</div></td>
32 <td><label>
33 <select name="lan">
34
<option value="">
请做选择</option>
35 <option value="english">
英语</option>
36 <option value="french">
法语</option>
37 <option value="panish">
西班牙语</option>
38 </select>
39 </label></td>
40 </tr>
41 <tr>
42 <td height="38" colspan="2"><label>
43 <input type="submit" name="Submit" value="
提交" />
44 </label></td>
45 </tr>
46 </table>
47 </form>
48 </body>
49 </html>
【代码解析】上述HTML文档定义了一个表单,其中有两个文本框元素和一个下拉列表框元素。代码第16行将表单命名为fdata。第08、09两行引入了一个JavaScipt文件1-38.js,验证该表单数据是否完整有效的JavaScript程序将在这个js文件中完成。请特别注意代码中的如下这行代码。
<form id="fdata" name="fdata" method="post" action="" onsubmit="return checkForm()">
这行代码使用了onsubmit事件,这个事件触发时会调用JavaScript函数checkForm(),在函数checkForm()中实现对表单数据的验证,本节稍后将完成这个JavaScript程序。运行1-37.html将会看到如图1-17所示的效果。

图1-17 一个含有HTML表单的Web页面
(2)实现验证表单数据的JavaScript程序checkForm()。为了使读者慢慢消化理解,先实现验证表单域不为空的部分,代码如下。
01 function checkForm()
02 {
03 if(document.fdata.num.value==""
04 || document.fdata.al.value==""
05 || document.fdata.lan.value==""
06 ) //
验证表单域是否有空值
07 {
08 alert("
表单中的每一项都必须填写"); //
提示信息
09 return false;
10 }
11 else
12 return true;
13 }
【代码解析】这段JavaScript代码通过document.fdata.num.value获得表单域各个元素的值,当它们之间任意一个为空时,都会弹出JavaScript警告对话框。将这段程序保存至1-38.js,然后在1-37.html页面中第1个文本框中填写任意数据,下拉列表框不做任何选择,单击“提交”按钮,此时会调用函数checkForm(),进而看到如图1-18所示的效果。

图1-18 验证提交数据是否为空
(3)判断提交数据只为数字或字母,代码如下。
01 if(document.fdata.num.value!="")
02 {
03 var s = document.fdata.num.value; //
获取名为num
的文本框中的值
04 for(var loc=0; loc<s.length; loc++) //
遍历num
文本框中的所有值
05 {
06 if((s.charAt(loc) < "0")||(s.charAt(loc)>"9")) //
通过charAt()
判断是否是数字
07 {
08 alert("
第1
个文本框只能输入数字!");
09 return false;
10 }
11 }
12 }
13
14 if(document.fdata.al.value!="")
15 {
16 var t = document.fdata.al.value; //
获取名为al
的文本框中的值
17 for(var loc=0; loc<t.length; loc++) //
遍历al
文本框中的所有值
18 { //
过charAt()
判断是否是英文字母
19 if((t.charAt(loc) < "a") || (t.charAt(loc) > "z") || (t.charAt(loc) < "A") || (t.charAt(loc) > "Z"))
20 {
21 alert("
第2
个文本框只能输入英文字母!");
22 return false;
23 }
24 }
25 }
【代码解析】要判断是否为是数字时,首先通过代码document.fdata.num.value获取第1个文本框的值,然后循环判断所输入值的每一位是否都是数字,如代码第04~11行所示。判断是否为英文字母的方法与判断是否为数字的方法类似。因为这个实例中,还要求输入的数字长度要小于10,所以还需要加一段代码判断数字字符串的长度是否小于10。这一点非常好实现,只需在上述代码判断数字的部分加入如下代码即可。
if(s.length > 9)
{
alert("
第1
个文本框字符串长度要小于10
!");
return false;
}
如果用户最终填写的内容和所做的选择都正确,就会将用户填写的内容和所做的选择用JavaScript弹出对话框返回给用户。验证表单数据的函数checkForm()的完整代码如代码1-5所示。
代码1-5 验证表单数据的JavaScript程序1-38.js
01 function checkForm()
02 {
03 if(document.fdata.num.value==""
04 || document.fdata.al.value==""
05 || document.fdata.lan.value=="0"
06 ) //
判断是否有没有填写的数据
07 {
08 alert("
表单中的每一项都必须填写!");
09 return false;
10 }
11
12 if(document.fdata.num.value!="") //
如果num
文本框有值
13 {
14 var s = document.fdata.num.value; //
获取num
文本框的值
15 if(s.length > 9)
16 {
17 alert("
第1
个文本框字符串长度要小于10
!");
18 return false;
19 }
20 for(var loc=0; loc<s.length; loc++) //
循环判断值是否为数字
21 {
22 if((s.charAt(loc) < "0") || (s.charAt(loc) > "9"))
23 {
24 alert("
第1
个文本框只能输入数字!");
25 return false;
26 }
27 }
28 }
29
30 if(document.fdata.al.value!="") //
如果al
文本框有值
31 {
32 var t = document.fdata.al.value; //
获取al
文本框的值
33 for(var loc=0; loc<t.length; loc++) //
通过循环判断值是否都为英文字母
34 {
35 if(((t.charAt(loc) < "a") || (t.charAt(loc) > "z")) && ((t.charAt(loc) < "A") || (t.charAt(loc) > "Z")))
36 {
37 alert("
第2
个文本框只能输入英文字母!");
38 return false;
39 }
40 }
41 }
42
43 var v = document.fdata.lan.value; //
获取下拉列表框中用户的选择
44
45 var str = "
您的填写和选择为:\r\n" + s + "\r\n" + t + "\r\n" + v;
//
获取用户所填写和选择的数据
46 alert (str); //
使用alert()
显示给用户
47 }
【代码解析】代码第03~10行判断3个要求用户填写或选择的地方是否已经完成,如果有一项没有填写,则调用第08行的函数进行提示。第30~41行判断第2个文本框的输入,这里使用charAt()函数判断输入的内容是否是小写字母或大写字母,如果不是,输出第37行的提示。
若表单数据填写符合要求,单击“提交”按钮提交表单后,将看到如图1-19所示的效果。

图1-19 表单验证通过后的效果
下一篇:1.8小结
