ASP中JavaScript处理复杂表单的生成与验证第1/3页

这里所谓的复杂表单,是指表单中包含多种不同的输入类型,比如下拉列表框、单行文本、多行文本、数值等。在经常需要更换这类表单的场合,需要有一个表单的动态生成程序。本文介绍的正是这样一个系统,它以数据库保存表单定义数据,利用ASP脚本动态生成表单HTML代码以及验证表单输入的脚本。
  一、定义数据库表结构
  在Web上经常可以看到“每周调查”之类的表单,这就是一种需要经常更新的表单。如果有一个动态生成表单及其验证脚本的程序,可以大大减少制作这些表单的工作量。
  在本文的动态表单生成与验证示例中,我们使用一个Access数据库来存储有关表单的定义信息,同时为简单计,用户在表单中输入的数据也保存到同一数据库。定义表单需要两个表:第一个表(Definitons)用于表单输入域的定义,第二个表(Lists)保存各个输入域的附加信息,比如选择列表的选择项。
  表Definitons包含如下字段:
FieldName —— 赋予表单输入域的变量名字 
Label —— 即文本标签,显示在输入域前面的提示性文字 
Type —— 单个字符,该字符表示表单输入域的形式和输入值的类型
  具体如下:
  (t) 文本输入框,即< INPUT TYPE="TEXT" >。
  (n) 文本输入框,但要求输入数字值。
  (m) 备注型内容,用于注释或其他大量文本的输入,它是一个多行文本编辑框。
  (b) 要求输入“是”或“否”。本实现中将用复选框来获取这种输入,复选框的文本标签为“是”。如果用户选中它,则返回值是“on”。
  (r) 单选按钮。
  (l) 下拉列表框。
  Min —— 仅对数字型输入值有效,在这里给出最小值。在本例中有一个“Age”(年龄)数字型输入框,它的最小值设定为1。
  Max —— 该字段的值与输入域形式有关。对于数字型输入框,它表示的是允许的最大值。例如“Age”的Max值为100。对于文本输入框,Max表示允许的最多字符个数。对于多行文本编辑框,Max表示可见区域的文本行数。
  Required —— 表示是否必须输入。这种类型的值如果没有输入,则输入验证程序将报告错误。在表单中,必须输入的值以星号标记,并以脚注的形式提示用户该类值必须输入。
  本文的示例表单是一个ASP程序员调查表,在Definitons表中该表单的定义主要如下:
  FieldName Label Type Min Max Required
  Name 姓名 文本(t) - 50 否
  Age 年龄 数字(n) 1 100 否
  Sex 性别 单选按钮(r) - - 是
  E-mail 邮件地址 文本(t) - - 是
  Language 编程语言 下拉列表框(l) - - 否
  表Lists用于保存输入域定义的一些附加信息,本例有“Sex”和“Languages”两个输入值要用到它。表Lists非常简单,只包含如下三个字段:
  FieldName —— 当前记录属于哪个表单输入域
  Value —— 选择项的值
  Label —— 用户所看到的选择项的提示文本
  输入域“Sex”只能从两个值选取:“男”或“女”。“Language”列出了几种可应用于ASP环境的编程语言,包括:VBScript,JavaScript,C,Perl和“其他”。
  第三个表“Records”保存用户提交的内容,它也包含三个字段,每个记录对应用户的一次提交:
  Record —— 备注类型,以查询字符串形式保存的用户输入。
  Created —— 用户提交该表单的日期和时间。 RemoteIP —— 表单提交者的IP地址。
  在实际应用中可能要收集更多有关用户的信息,为简单计,本例只记录提交时间和用户IP地址这两个附加信息。
  二、准备工作
  在完成上述数据结构和表单的定义之后,接下来就可以编写脚本。脚本的任务是生成表单以及处理用户提交的表单。
  无论是表单的生成还是处理,以下三个过程(任务)都是必不可少的:第一是确定验证类型,在生成表单时验证类型值通过查询字符串获得,在处理表单时从表单隐藏域读取。程序支持的表单验证方式共有以下四种类型:不进行验证,客户端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 
  '处理表单 
  ...略... 
  End If

当前1/3页 123下一页阅读全文

(0)

相关推荐

  • javascript表单处理具体实现代码(表单、链接、按钮)

    本文实例处理各种表单, 以及链接,按钮的通用组件,教大家如何对javascript表单处理进行操作,具体内容如下 /** * Generic Form processing js * @author Anthony.chen */ /** * Push button action [btn_action]data into form * If there is prescript , run the pre script */ "use strict"; //All ajax requ

  • ASP之处理用Javascript动态添加的表单元素数据的代码

    上一篇文章讲到了动态添加表单元素,这次我们来讲讲怎么样来处理这些动态添加的表单元素传过来的数据! 怎么样动态添加表单元素,我这里就不细说了!不明白的看看上一篇文章http://www.jb51.net/html/200711/23/12856.htm下面是动态添加表单元素的页面代码! 复制代码 代码如下: <html >  <head>  <title>动态添加表单元素BlueShine</title>  </head>  <script 

  • jquery序列化form表单使用ajax提交后处理返回的json数据

    1.返回json字符串: 复制代码 代码如下: /** 将一个字符串输出到浏览器 */     protected void writeJson(String json) {         PrintWriter pw = null;         try {             servletResponse.setContentType("text/plain;charset=UTF-8");             pw = servletResponse.getWrit

  • JavaScript 表单处理实现代码

    一 表单介绍 在HTML中,表单是由<form>元素来表示的,而在JavaScript中,表单对应的则是HTMLFormElement类型; // HTMLFormElement继承了HTMLElement;因此它拥有HTML元素具有的默认属性,别且还独有自己的属性和方法; HTMLFormElement属性和方法 属性或方法 说明 acceptCharset 服务器能够处理的字符集; action 接受请求的URL; elements 表单中所有控件的集合; enctype 请求的编码类型;

  • js表单处理中单选、多选、选择框值的获取及表单的序列化

    本文总结了下在表单处理中单选.多选.选择框值的获取及表单的序列化,写成了一个对象.如下: var formUtil = { // 获取单选按钮的值,如有没有选的话返回null // elements为radio类的集合的引用 getRadioValue:function(elements) { var value = null; // null表示没有选中项 // 非IE浏览器 if(elements.value != undefined && elements.value != '')

  • js实现表单多按钮提交action的处理方法

    之前一篇文章介绍了php实现表单多按钮提交action的处理方法,今天再介绍一种js实现表单多按钮提交action的处理方法,希望能够帮助到大家. 用JS实现一个表单多个按钮的方法,两个onclick事件处理,代码如下: <html> <head> <script> function submitit1() //交由程序1处理 { document.myForm.action = "http://www.site.com/cgi1.php" docu

  • JSP针对表单重复提交的处理方法

    本文实例讲述了JSP针对表单重复提交的处理方法.分享给大家供大家参考,具体如下: 1. 在生成表单时执行如下: 复制代码 代码如下: session.setAttribute("forum_add", "forum_add"); 2. 提交处理时作如下判断 if (isRedo(request, "forum_add")) { //提示重复提交,作相关处理 } 相关函数: /** * 判断是否为重复提交 * 1,检查Session中是否含有指定名

  • javascript处理表单示例(javascript提交表单)

    处理各种表单, 以及链接,按钮的通用组件 复制代码 代码如下: /** * Generic Form processing js * @author Anthony.chen */ /** * Push button action [btn_action]data into form * If there is prescript , run the pre script */"use strict";//All ajax request are synchronized by def

  • 基于JavaScript将表单序列化类型的数据转化成对象的处理(允许对象中包含对象)

    表单序列化类型的数据是指url传递的数据的格式,形如"key=value&key=value&key=value"这样的key/value的键值对.一般来说使用jQuery的$.fn.serialize函数能达到这样的效果.如何将这样的格式转化为对象? 我们知道使用jQuery的$.fn.serializeArray函数得到的是一个如下结构的对象 [ { name: "startTime" value: "2015-12-02 00:00:

  • javascript 解决表单仍然提交即使监听处理函数返回false

    复制代码 代码如下: <form action="http://www.jb51.net" id="form"> <input type="text" /> <input type="submit" /> </form> <script> var code = function () { return false; }; var element = window.do

随机推荐