使用HTML5构建下一代的Web Form

移动开发 Android
HTML语言作为如今编程最为广泛的语言,具有易用、快捷、多浏览平台兼容等特点,但是随着时代的进步,HTML的标准却停滞不前,这一次还在不断开发中的HTML5标准的更新可以说给这门标记语言带来了新的生命力。本文将着重讨论HTML5中的Web Forms 2.0, 即表单的部分。

HTML语言作为如今编程最为广泛的语言,具有易用、快捷、多浏览平台兼容等特点,但是随着时代的进步,HTML的标准却停滞不前,这一次还在不断开发中的HTML5标准的更新可以说给这门标记语言带来了新的生命力。本文将着重讨论HTML5中的Web Forms 2.0, 即表单的部分。

表单是网页中常见的控件(集)。小到网站注册登录,大到一个企业的数据管理系统,都基本上有表单的身影。表单之所以如此重 要,主要是因为它担负大量的用户和网页后台数据更新交互的任务。Web开发人员,对于网页表单可以说又爱又恨,爱的是它方便的收集、组织数据的功能,恨的 是它的功能很大程度上也就仅此而已。一些在最终网站用户看起来稀松平常的功能,比如说输入类型检查、表单校验、错误提示等等,开发人员无不需要花费大量精 力利用 JavaScript和DOM编程来满足这些天然所需的功能点,而随着Ajax的流行,出现的一些JavaScript的工具库,比如Dojo, YUI等都提供了方便的JavaScript Widget或者API来减轻开发人员的负担。

HTML5的表单新特性

HTML5 Web Forms 2.0是对目前Web表单的全面提升,它在保持了简便易用的特性的同时,增加了许多内置的控件或者控件属性来满足用户的需求,并且同时减少了开发人员的编程。在我看来,HTML5 主要在以下几个方面对目前的Web表单做了改进:

1.新的控件类型 ◆还在为类型检查犯愁吗,还在为那一长串看不太明白的检验输入的正则表达式而苦恼吗,HTML5提供的一系列新的控件将天然的具备类型检查的功能。比如说URL输入框,Email输入框等。

<LI clss=alt><input type="url"></< SPAN>input> 

<input type="email"></< SPAN>input> 

当然还有非常重要的日期输入框,要知道使用JavaScript和CSS来“手工”制作一个日期输入框还是非常花功夫的,类似Dojo,YUI这样的类库也无不在这个widget上面大做文章。

作为我痛苦记忆的一部分,我经常记得我们开发人员要为一个select下拉别表动态的添加非常多的选项,这些选项大多数都是来自数据库,比如说国家、省市列表等等。这个事情非常繁琐。HTML5将支持data属性,为select控件外联数据源!

  1.  

<select data="http://domain/getmyoptions"></< SPAN>select> 

2.改进的文件上传控件,你可以使用一个控件上传多个文件,自行规定上传文件的类型(accept),你甚至可以设定每个 文件***的大小(maxlength)。你看出它和一般操作系统提供的文件上传控件的区别了吗,反正我觉得基本一致了。在HTML5应用中,文件上传控件 将变得非常强大和易用。

3.重复(repeat)的模型,HTML5提供一套重复机制来帮助我们构建一些重复输入列表,其中包括一 些诸如 add、remove、move-up,move-down的按钮类型,通过这一套重复的机制,开发人员可以非常方便的实现我们经常看到的编辑列表,这是 一个很常见的模式,我们可以增加一个条目、删除某个条目、或者移动某个条目等等。

4.内建的表单校验系统,HTML5为不同类型的输入控件各自提供了新的属性,来控制这些控件的输入行为, 比如我们常见的必填项required属性,以及为数字类型控件提供的max、min等。而在你提交表单的时候,一旦校验错误,浏览器将不执行提交操作, 而会显示相应的检验错误信息。

  1. <LI class=alt><input type="text" required></< SPAN>input> 
  2.  

<input type="number" min=10  max=100></< SPAN>input> 

5.XML Submission,我们一般常见的是Web Form的编码格式是application/x-www-form-urlencoded。开发人员都很清楚这种格式,数据送到服务器端,可以方便的存 取。HTML5提供一种新的数据格式:XML Submission,即application/x-www-form+xml。简单的举例说,服务器端将直接接收到XML形式的表单数据。 

  1. <LI class=alt><submission> 
  2.     <field name="name" index="0">Peter</< SPAN>field> <LI class=alt>    <fieldname="password" index="0">password</< SPAN>field> 
  3. </< SPAN>submission> 

我将利用HTML5新的表单系统, 做一个简单的用户注册的界面,包括用户名,密码,出生日期,保密问题等内容,代码如下:

  1. <LI class=alt><! doctype html> 
  2. <html> <LI class=alt>    <head> 
  3.         <style> <LI class=alt>            p label {   
  4.                 width: 180px;  <LI class=alt>                float: left;   
  5.                 text-align: right;  <LI class=alt>                padding-right: 10px   
  6.             }  <LI class=alt>            table {   
  7.                 margin-left: 80px  <LI class=alt>            }   
  8.             table td {  <LI class=alt>                border-bottom: 1px solid #CCCCCC   
  9.             }  <LI class=alt>            input.submit {   
  10.                 margin-left: 80px  <LI class=alt>            }   
  11.         </< SPAN>style> <LI class=alt>    </< SPAN>head> 
  12.     <body> <LI class=alt>        <form action='/register' enctype="application/x-www-form+xml" method="post"
  13.             <p> <LI class=alt>                <label for='name'>ID(请使用Email注册)</< SPAN>label> 
  14.                 <input name='name' required type='email'></< SPAN>input> <LI class=alt>            </< SPAN>p> 
  15.             <p> <LI class=alt>                <label for='password'>密码</< SPAN>label> 
  16.                 <input name='password' required type='password'></< SPAN>input><LI class=alt>            </< SPAN>p> 
  17.             <p> <LI class=alt>                <label for='birthday'>出生日期</< SPAN>label> 
  18.                 <input type='date' name='birthday' /> <LI class=alt>            </< SPAN>p> 
  19.             <p> <LI class=alt>                <label for='gender'>国籍</< SPAN>label> 
  20.                 <select name='country' data='countries.xml'></< SPAN>select> <LI class=alt>            </< SPAN>p> 
  21.             <p> <LI class=alt>                <label for='photo'>个性头像</< SPAN>label> 
  22.                 <input type='file' name='photo' accept='image/*' /> <LI class=alt>            </< SPAN>p> 
  23.             <table> <LI class=alt>                <thead> 
  24.                     <td><button type="add" template="questionId">+</< SPAN>button> 保密问题</< SPAN>td> <LI class=alt>                    <td>答案</< SPAN>td> 
  25.                     <td></< SPAN>td> <LI class=alt>                </< SPAN>thead> 
  26.                 <tr id="questionId" repeat="template" repeat-start="1" repeat-min="1"repeat-max="3"> <LI class=alt>                    <td><input type="text"name="questions[questionId].q"></< SPAN>td> 
  27. <td><input type="text" name="questions[questionId].a"></< SPAN>td> <LI class=alt><td><button type="remove">删除</< SPAN>button></< SPAN>td> 
  28.                 </< SPAN>tr> <LI class=alt>            </< SPAN>table> 
  29.             <p> <LI class=alt>                <input type='submit' value='send'class='submit' /> 
  30.             </< SPAN>p> <LI class=alt>        </< SPAN>form> 
  31.     </< SPAN>body> 
  32. </< SPAN>html> 

由于目前HTML5标准仍然在开发中,不同的浏览器对HTML5特性的支持都相当有限。其中Opera在表单方面支持得比较好,本实例在Opera9上运行一切正常,效果图如下:

 

这个实例运用了一些HTML5的新的表单元素,比如email类型的输入框(ID),日期类型的输入框(出 生日期)。并且使用了重复模型来引导用户填写保密问题,而在个性头像的上传中,通过限制文件类型,方便用户选择图片进行合乎规范的内容上传。而用户选择国 籍的下拉选择输入框中,采用的是外联数据源的形式,外联数据源使用coutries.xml,内容如下:  

  1. <LI class=alt><select xmlns="http://www.w3.org/1999/xhtml"
  2.     <option>China</< SPAN>option> <LI class=alt>    <option>Japan</< SPAN>option> 
  3.     <option>Korea</< SPAN>option> 
  4. </< SPAN>select> 

并且form的enctype是application/x-www-form+xml,也就是HTML5的XML提交。 所以一旦form校验通过,form的内容将会以XML的形式提交。你还会发现,在ID输入框如果没有值,或者输入了非email类型的字符串时,一旦试 图提交表单,就会有提示错误的信息出现,而这都是浏览器内置的。

结语

HTML5对表单控件的更新,无疑是很振奋人心的。本文描述了一部分表单的新特性,还有一部分新特性同样很令人期待。相信随着标准的深入开发以及浏览器对HTML5支持程度的进一步提升,设计一个简单易用的表单的工作,将变得非常轻松。

本文链接:http://html5.662p.com/thread-43-1-1.html

 

责任编辑:chenqingxiang 来源: html5.662p
相关推荐

2009-06-26 09:06:01

2011-01-19 08:25:57

HTML5Web

2009-03-16 09:27:45

HTML 5IBM套接字

2013-07-27 21:28:44

2013-06-27 11:21:17

2012-11-16 11:31:39

大数据CRM

2021-04-01 09:01:57

lit-htmlJavaScript DOM API

2011-01-11 10:13:06

2018-09-27 18:47:45

AIOpsDevOps

2020-09-27 17:27:58

边缘计算云计算技术

2011-05-11 12:59:18

HTML5

2015-08-26 17:22:45

bootstrap下一代特点

2015-08-27 09:37:22

Bootstrap特点

2011-05-11 13:39:13

2011-05-11 18:00:10

HTML5兼容性

2011-04-19 16:57:07

HTML5

2011-05-12 16:01:51

HTML5

2016-01-26 11:58:12

2011-11-03 14:19:15

2014-10-10 15:59:05

点赞
收藏

51CTO技术栈公众号