HTML5编程之旅 第4站 Forms


    涉及到Web开发的,肯定要涉及到HTML表单,本节将带你走入HTML5表单的世界。

一、HTML5 Forms概述

熟悉HTML表单的开发人士,可以很容易的适应HTML5 Forms的新增功能。

XFomrs是一个以XML为核心、功能强大却略显复杂的标准,其充分利用了XML Schema,制定了针对验证和格式化的精确准则,但在未安装插件的情况下,主浏览器均不支持XForms

HTML5表单注重对现有HTML表单的改进,目的在于包含更多控件类型,同时着力解决Web开发人员今天面对的实际难题,但要时刻关注表单的跨浏览器实现。

HTML5表单主要关注功能动作和语义,而非外观和显示效果。

HTML5表单控件主要分为两大类:新的输入型控件、新的函数和特性。

HTML5中引入的新的输入型控件类型主要包括:tel(电话号码)email(电子邮件地址文本框)url(网页的url)search(用于搜索引擎,比如在站点顶部显示的搜索框)range(特定值范围的数值选择器,如滑动条)。使用方式与以前的HTML表单类似,设置其type类型为上述类型即可,如:<input type="email"><input type="range" min="10" max="30">等。

二、使用HTML5 Fomrs API

1、新表单特性和函数

placeholder:向用户显示描述性说明或提示信息,如:<input name="name" placeholder="请输入姓名" required>

autocomplete:用来保护敏感用户数据,避免本地浏览器进行存储 ,主要有 on(字段值无需保护)、off(字段值需要保护)、unspecified三种行为。如:<input type="text" name="creditcard" autocomplete="off">

autofocus:指定某个表单元素获得输入焦点

listdatalist:组合使用这两个特性可以为输入型控件构造一张选值列表,使用方法如下:(1)创建id值唯一的datalist元素,可以在文档任意位置插入;(2)添加若干option元素,如:

<datalist id="contactList">
    <option value="[email protected]" label="Racer">
    <option value="[email protected]" label="Perter">
</datalist>

3)将inputlist特性值设置为datalistid

<input type="email" id="contacts" list="contactList">

minmax:主要用于range元素

step:指定输入值递增或递减的粒度。

valueAsNumber函数:完成控件值类型在文本与数值间的相互转换

required:指定表单元素为必填

2、表单验证

valueMissing

目的:确保表单控件中的值已填写

用法:设置控件的requiredtrue

typeMismatch

目的:保证控件值与预期类型相匹配

用法:指定 表单控件的type特性值

patterMismatch

目的:根据控件设置的格式规则验证输入是否为有效格式

用法:指定控件的pattern特性,并赋予适当的匹配规则

tooLong

目的:避免值包含过多字符

用法:设定控件的maxLength特性

rangeUnderFlow

目的:限制数值型控件的最小值

用法:设置控件的min特性,并赋值

rangeOverflow

目的:限制数值型控件的最大值

用法:设置控件的max特性,并赋值

stepMismatch

目的:确保输入值符合minmaxstep设置

用法:设置控件的step特性,并赋值

customError

目的:处理代码及计算产生的错误

用法:调用setCustomValidity((message)将控件置于customError状态

注意:还可以通过表单控件来访问ValidityState对象,如var check = documenet.myForm.myInput.validity;然后调用check.valid

3、验证反馈

HTML5中,如果开发人员想把错误消息反馈给用户,可以使用invalid事件。

function invalidHandler(evt){
    var validity = evt.srcElement.valididy;
    if(validity.valueMissing){
        //提示用户必填项中没有填值
    }
    //检测其他约束条件
    //如果不希望浏览器提供默认的验证反馈,可以取消事件
    evt.preventDefault();
}
 
//注册 invalid事件的监听器__halt_compiler
 
myField.addEventListener("invalid",invalidHandler,false)

还可以通过设置noValidate特性来关闭验证。

三、HTML5 Forms示例应用

<!DOCTYPE html> 
<html>
    <head>
        <title>HTML5 Forms例子</title>
            <meta http-equiv="Content-type" content="text/html;charset=UTF-8">
        <link rel="stylesheet" href = "html5.css">
         
        <style type="text/css">
         
        label {
        text-align: right;
        width: 90px;
        float: left;
        }
         
        input {
        margin-top: 0px;
        padding-top: 0px;
        }
         
        fieldset {
        margin-top: 5px;
        }
         
        #confidenceDisplay {
        vertical-align: top;
        }
        </style>
         
        <script>
        function setConfidence(newVal) {
        document.getElementById("confidenceDisplay").innerHTML = newVal + '%';
        }
         
        function invalidHandler(evt) {
        // find the label for this form control
        var label = evt.srcElement.parentElement.getElementsByTagName("label")[0];
         
        // set the label's text color to red
        label.style.color = 'red';
         
        // stop the event from propagating higher
        evt.stopPropagation();
         
        // stop the browser's default handling of the validation error
        evt.preventDefault();
        }
        function loadDemo() {
           // register an event handler on the form to
           // handle all invalid control notifications
           document.register.addEventListener("invalid", invalidHandler, true);
        }
         
        window.addEventListener("load", loadDemo, false);
         
        </script>     
    </head>     
    <body>
        <div id="container">
        <header>
            <h1>HTML5 Forms例子</h1>
            <h3 align="center"></h3>
            <h2> </h2>
            <h4></h4>
        </header>
     
        <nav>
            <h2>链接</h2>
            <a href="#" title="Home">主页</a>
            <a href="signup.html" title="Are you crazy enough?">注册</a>
            <a href="#" title="Learn more about the T216">关于</a>
        </nav>
     
        <section>
          <article>
            <h2>注册</h2>       
           
            <form name="register">
              <p><label for="runnername">姓名:</label>
                 <input id="runnername"name="runnername" type="text"
                        placeholder="请填写姓名" required></p>
              <p><label for="phone">电话:</label>
                 <input id="phone" name="phone" type="tel"
                        placeholder="(xxx) xxx-xxx"></p>
              <p><label for="emailaddress">E-mail:</label>
                 <input id="emailaddress" name="emailaddress" type="email"
                        placeholder="请正确填写"></p>
              <p><label for="dob">日期:</label>
                 <input id="dob" name="dob" type="date"
                        placeholder="MM/DD/YYYY"></p>
              <fieldset>
                <legend>大小: </legend>
                <p><input id="small" type="radio" name="tshirt" value="small">
                   <label for="small">小</label></p>
                <p><input id="medium" type="radio" name="tshirt" value="medium">
                   <label for="medium">中</label></p>
                <p><input id="large" type="radio" name="tshirt" value="large">
                   <label for="large">大</label></p>
                <p><label for="style">样式:</label>
                   <input id="style" name="style" type="text" list="stylelist" title="Years of participation"></p>
                <datalist id="stylelist">
                 <option value="白" label="第一年">
                 <option value="灰" label="第二至四年">
                 <option value="深蓝" label="V五年以上">
                </datalist>
              </fieldset>
             <fieldset>
                <legend>预期:</legend>
                <p>
                <label for="confidence">可信度:</label>
                <input id="confidence" name="level" type="range"
                       onchange="setConfidence(this.value)"
                       min="0" max="100" step="5" value="0">
                <span id="confidenceDisplay">0%</span></p>
                <p><label for="notes">备注:</label>
                   <textarea id="notes" name="notes" maxLength="140"></textarea></p>
             </fieldset>
     
             <p><input type="submit" name="register" value="注册"></p>
            </form>
          </article>
        </section>
     
        <aside>
          <h2>发起者</h2>
          <p align="center">***俱乐部</p>
         <p align="center"><img src="happy-trails-rc.gif" alt="Happy Trails Running Club" width="149" height="207"></p>
        </aside>
     
        <footer>
            <p>Powered by HTML5</p>
        </footer>
     
        </div>
    </body>
</html>

 

 

 


你可能感兴趣的:(html,Forms)