ASP+JAVAScript:复杂表单的动态生成与验证(2)

时间:2007-10-06 21:51:00 


  二、准备工作
  在完成上述数据结构和表单的定义之后,接下来就可以编写脚本。脚本的任务是生成表单以及处理用户提交的表单。
  无论是表单的生成还是处理,以下三个过程(任务)都是必不可少的:第一是确定验证类型,在生成表单时验证类型值通过查询字符串获得,在处理表单时从表单隐藏域读取。程序支持的表单验证方式共有以下四种类型:不进行验证,客户端JavaScript验证,服务器端ASP脚本验证,客户端和服务器端都进行验证(代号分别为0到3)。如果没有在查询字符串中指定合法的验证方式,则默认第四种验证方式。这种验证处理方式使得我们可以灵活地应用这个表单生成、处理系统,当客户端禁止使用JavaScript验证时就可以仅在服务器端执行验证过程。下面是确定验证类型的代码:
  检查验证类型 


 iValType = Request.QueryString("val") 
  If IsNumeric(iValType) = False Then iValType = 3 
  If iValType > 3 Or iValType < 0 Then iValType =3 

第二个任务是打开数据库连接,创建两个记录集对象:RS对象,这是本程序中的主要记录集对象,用来操作Definitions表;RSList对象,主要用于从Lists表读取数据。示例程序提供两种数据库连接方法:使用ODBC DSN或不使用ODBC DSN(使用DSN时需要先创建名为Dynamic的DSN,使用DSN连接数据库的代码已经被注释掉)。
  第三个任务是在生成(或处理)表单脚本的前面(和后面)输出一些静态的HTML代码,比如< HEAD >< /HEAD >,以及在脚本运行结束的时候释放RS、RSList等对象占用的资源。
  除了完成上述任务的代码外,示例应用中其余ASP脚本可能生成的页面有两种类型:提问表单(见上图)以及表单提交后出现的结果页面(后者同时还负责用户提交结果的记录)。要确定究竟运行哪一部分脚本,最简单的方法就是检查是否已经提交表单:如是,则处理表单;否则生成表单。
  是生成表单还是处理表单?



If Len(Request.Form) = 0 Then 
  ’生成表单 
  ...略... 
  Else 
  ’处理表单 
  ...略... 


 

三、动态生成表单
  生成表单时,程序按照Definitons表中的各个输入域定义记录,依次生成相应的表单HTML代码和JavaScript代码。HTML代码中首先要生成的是文本标签:


sHTML = sHTML & vbTab & "< TR >" & vbCrLf & vbTab & vbTab 
  sHTML = sHTML & "< TD VALIGN=" & Chr(34) & "TOP" & Chr(34) 
  sHTML = sHTML & " >" & vbCrLf & vbTab & vbTab & vbTab 
  sHTML = sHTML & "< B >" & RS.Fields("Label") 

然后程序检查当前输入域是否必须输入。如果必须,则在标签文本之后加一个星号(表示该值必须输入),同时对于必须输入的值,还要生成相应的JavaScript代码来验证它。对于单选按钮或选择列表,需进一步检查用户确实选择了某个选项;对于所有其他输入类型,只要检查输入值不为空即可。
  紧接文本标签的是表单的输入元素,这些元素的HTML代码根据Definitions表中指定的类型和属性生成。再接下来就是根据输入值要求生成执行客户端验证任务的JavaScript代码。对于本例,只有数字型的值需要进一步检查以保证用户的输入确实是数字,而且数字值在许可的最大值和最小值之间。生成上述代码之后,就可以结束一个表格行(也就是一个输入域)继续处理Definitions表的下一个记录。一旦所有的数据库记录处理完毕,下一步就可以加入“提交”按钮和“清除”按钮的HTML代码。如果换个角度来看,程序在这里的任务就是根据数据库记录生成各个输入域,每个输入域占用一个表格行,每个表格行二个单元:第一个单元用来显示文本标签,第二个单元显示输入元素本身(代码见dForm.asp)。
  上述过程结束之后,表单的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函数将调用它们。

标签:表单,验证,动态
0
投稿

猜你喜欢

  • python之mock模块基本使用方法详解

    2022-03-05 03:10:33
  • python因子分析的实例

    2021-12-29 18:20:44
  • python避免死锁方法实例分析

    2023-08-04 04:32:59
  • Python GUI Tkinter简单实现个性签名设计

    2022-05-22 16:04:08
  • python调用文字识别OCR轻松搞定验证码

    2023-02-20 17:10:54
  • Python datatime库语法使用详解

    2022-01-30 03:16:17
  • javascript实现秒表计时器的制作方法

    2024-05-05 09:15:07
  • Python extract及contains方法代码实例

    2021-03-29 07:51:25
  • 编写PHP脚本使WordPress的主题支持Widget侧边栏

    2023-11-23 20:27:13
  • MySQL数据库数据删除操作详解

    2024-01-13 11:55:42
  • Python中class内置方法__init__与__new__作用与区别解析

    2022-12-21 06:00:38
  • mysql分页性能探索

    2024-01-23 22:35:21
  • python Airtest自动化测试工具的的使用

    2023-10-28 02:12:57
  • python利用datetime模块计算程序运行时间问题

    2022-05-24 03:13:41
  • Python下应用opencv 实现人脸检测功能

    2022-09-18 00:25:44
  • python模拟登录百度贴吧(百度贴吧登录)实例

    2023-11-20 14:30:56
  • 使用xml http为网站增加域名查询功能

    2008-05-29 13:42:00
  • python生成不重复随机数和对list乱序的解决方法

    2023-09-24 01:17:59
  • Go REFLECT Library反射类型详解

    2024-04-26 17:25:15
  • Python字符串常规操作小结

    2023-12-02 08:33:23
  • asp之家 网络编程 m.aspxhome.com