日期:2014-05-18  浏览次数:20861 次

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 "   >