HTML5編程之旅 第4站 Forms


    涉及到Web開發的,確定要涉及到HTML表單,本節將帶你走入HTML5表單的世界。
css

1、HTML5 Forms概述html

熟悉HTML表單的開發人士,能夠很容易的適應HTML5 Forms的新增功能。html5

XFomrs是一個以XML爲核心、功能強大卻略顯複雜的標準,其充分利用了XML Schema,制定了針對驗證和格式化的精確準則,但在未安裝插件的狀況下,主瀏覽器均不支持XForms瀏覽器

HTML5表單注重對現有HTML表單的改進,目的在於包含更多控件類型,同時着力解決Web開發人員今天面對的實際難題,但要時刻關注表單的跨瀏覽器實現。app

HTML5表單主要關注功能動做和語義,而非外觀和顯示效果。ide

HTML5表單控件主要分爲兩大類:新的輸入型控件、新的函數和特性。函數

HTML5中引入的新的輸入型控件類型主要包括:tel(電話號碼)email(電子郵件地址文本框)url(網頁的url)search(用於搜索引擎,好比在站點頂部顯示的搜索框)range(特定值範圍的數值選擇器,如滑動條)。使用方式與之前的HTML表單相似,設置其type類型爲上述類型便可,如:<input type="email"><input type="range" min="10" max="30">等。ui

2、使用HTML5 Fomrs APIthis

一、新表單特性和函數搜索引擎

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="2@xx.com" label="Racer">
    <option value="3@xx.com" label="Perter">
</datalist>

3)將inputlist特性值設置爲datalistid

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

minmax:主要用於range元素

step:指定輸入值遞增或遞減的粒度。

valueAsNumber函數:完成控件值類型在文本與數值間的相互轉換

required:指定表單元素爲必填

二、表單驗證

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

三、驗證反饋

HTML5中,若是開發人員想把錯誤消息反饋給用戶,可使用invalid事件。

function invalidHandler(evt){
    var validity = evt.srcElement.valididy;
    if(validity.valueMissing){
        //提示用戶必填項中沒有填值
    }
    //檢測其餘約束條件
    //若是不但願瀏覽器提供默認的驗證反饋,能夠取消事件
    evt.preventDefault();
}
 
//註冊 invalid事件的監聽器__halt_compiler
 
myField.addEventListener("invalid",invalidHandler,false)

還能夠經過設置noValidate特性來關閉驗證。

3、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>
相關文章
相關標籤/搜索