ASP+JS处理复杂表单的生成与验证[2]
上述过程结束之后,表单的HTML代码和验证用JavaScript函数分别保存到了变量sHTML和sJavaScript中。在把这些内容写入页面之前,程序检查客户端是否要求执行JavaScript验证,如果不要求执行这类验证,则清除sJavaScript变量:
If iValType = 0 Or iValType = 2 Then sJavaScript = " "
在输出BODY标记之后,程序输出如下JavaScript函数:
以下是引用片段:
< SCRIPT LANGUAGE= "JavaScript " >
< !--
function validate(TheForm){
//客户端表单验证
< %=sJavaScript% >
return true;
}
function CheckRadio(objRadio){
//单选按钮中是否有某个值被选中
for(var n = 0; n < objRadio.length; n++){
if(objRadio[n].checked){
return true;
}
}
return false;
}
function CheckList(objList){
//是否已经在选择列表中选择了某个值
for(var n = 1; n < objList.length; n++){
if(objList.options[n].selected){
return true;
}
}
return false;
}
//-- >
< /Script >
如果客户端不需要JavaScript验证,则validate函数只剩下一个“return true”语句。上面代码中的后面两个静态JavaScript函数(CheckRadio和CheckList)用于验证单选按钮和下拉列表框,当这两种输入域需要验证时validate函数将调用它们。
现在可以开始把表单写入页面:
< FORM ACTION= "./dform.asp " METHOD= "POST " NAME= "MyForm " onSubmit= "return validate(this) " >
在这里,只有当validate函数返回true时才执行表单提交操作。因此当客户端JavaScript验证功能关闭时,validate函数将自动返回true。
接下来要加入的是名为val的隐藏域。如前所述,该值指示表单的验证模式。
< INPUT TYPE= "HIDDEN " NAME= "val " VALUE= " < %=iValType% > " >
当用户提交表单时,处理脚本将根据该值确定是否执行服务器端验证。
然后输出的是表格标记以及表格标题。标题保存在变量sTitleLabel中,该值在脚本开始执行时初始化:
以下是引用片段:
< TABLE BORDER= "0 " >
< TR >
< TD COLSPAN= "2 " ALIGN= "CENTER " >
< H2 > < %=sTitleLable% > < /H2 >
< /TD >
< /TR >
作为改进措施,可以在表Definitions、Lists和Records中增加一个字段FormID。FormID唯一标识一个表单,这样程序就可以同时地定义多个表单、保存多个表单的用户应答结果。至于上面的sTitleLabel,我们可以用另外一个表(比如Forms)来保存。
紧接着表格标记和表格标题,程序输出的是HTML表单以及“提交”、“清除”按钮的代码。在此之后,程序检查sHTML字符串中是否包含“*”,如包含的话说明表单中存在必须输入的内容,此时就输出一个脚注以说明该星号的含义。
以下是引用片段:
< %=sHTML% >
< TR >
< TD COLSPAN= "2 " ALIGN= "CENTER " >