1. 程式人生 > >HTML5 基礎(4)—— HTML5表單新屬性的使用和驗證表單

HTML5 基礎(4)—— HTML5表單新屬性的使用和驗證表單

一、HTML5表單常用屬性

這些都是比較常用的

屬性名 說明
placeholder 在輸入框無內容時顯示灰色提示
autocomplete 部分輸入框和form都可以設定自動提示 off關閉,on開啟(預設是on)
autofocus 讓input自動獲取焦點
required 設定表單元素為必填
pattern 表單驗證使用正則
novalidate 該屬性使用在form標籤上,讓設定了驗證的表單可以直接提交 <form action=”…” novalidate>…</form>
formnovalidate 該屬性使用在提交按鈕上,讓設定了驗證的表單可以直接提交 <input type=”submit” value=”提交” formnonvalidate />
for <label>的for屬性是要配合<input>標籤中的id屬性使用的,點選label標籤for對應id的input標籤會獲取焦點

(一)部分型別的input無法使用placeholder屬性提示的解決方案

如輸入日期

<input type="text" name="date" onfocus="(this.type='date')"
placeholder="請輸入日期"/>

這裡寫圖片描述
點選後
這裡寫圖片描述
缺點是需要使用者點選2次

(二)<label>的for屬性使用

    <label for="man">男</label>
    <input type="radio" id="man" name="sex" />
    <label for="woman">女</label>
    <input type="radio" id="woman" name="sex" />
    <br>
    <label
for="username">使用者名稱</label> <input type="text" name="username" id="username" placeholder="請輸入使用者名稱" />

這裡寫圖片描述
點選文字選中單選按鈕

二、html5表單元素約束驗證API

屬性/方法/物件 說明
willValidate屬性 元素元素有沒有被符合。沒有符合返回false
validity物件 元素當前驗證狀態(物件)
validationMessage屬性 描述與元素相關約束的失敗資訊
checkValidity()方法 元素是否滿足任意約束
setCustomValidity()方法 設定自定義的驗證資訊

(一)validity物件的屬性

<form action="#">
    <input type="text" name="username" id="username" placeholder="請輸入使用者名稱" required pattern="^\d{4}$" />

    <input type="submit"/>
</form>
<script type="text/javascript">
    var input_username = document.getElementById('username');
    console.log(input_username.validity);
</script>

控制檯會打印出
這裡寫圖片描述

屬性名 說明
valid:true/false 當前輸入是否有效
badInput: false/true 輸入的值是否無效
patternMismatch: false/true 正則表示式驗證失敗
rangeOverflow: false/true 輸入值是否超過max的限定
rangeUnderflow: false/true 輸入值是否小於min的限定
tooLong : false/true 輸入的字元數是否超過maxlength
tooShort : false/true 輸入的字元數是否小於minlength
stepMismatch : false/true 輸入的數字不符合step限制
typeMismatch : false/true 輸入值不符合email、url的驗證
valueMissing : false/true 未輸入值,違反了required要求
customError : false/true 是否存在自定義錯誤
  • 只要有一個驗證方面錯誤,某個屬性就為true,valid值為false
  • 只有沒有任何驗證錯誤,所有的屬性都為false,valid才能為true
  • 上述的每個錯誤在瀏覽器內部都有一個預定義的錯誤提示訊息
  • 所有的錯誤訊息中,只要存在“自定義的錯誤訊息”,瀏覽器只顯示自定義的錯誤訊息,優先順序高於瀏覽器預定義的錯誤訊息(設定自定義錯誤訊息用setCustomValidity())

  • 當前沒有自定義錯誤訊息,所以customError : false

獲取與約束相關的屬性

validity物件中的每一個屬性代表一個驗證狀態,false表示驗證沒問題,true表示不符合驗證

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <title>Document</title>
    </head>
    <body>
        <form action="" method="get" id="forms">
            <input type="text" id="username" placeholder="使用者名稱" required />
            <input type="password" id="pws" placeholder="密碼" required />
            <input type="email" id="email" placeholder="郵箱" required />
            <input type="submit" value="提交" id="submitBtn">
        </form>
        <script>
            var form = document.getElementById("forms"),
            submitBtn = document.getElementById("submitBtn");

            submitBtn.addEventListener("click", function() {
                var invalidFields = form.querySelectorAll(":invalid");
                for(var i=0,len=invalidFields.length;i<len;++i){
                    console.log('input#'+invalidFields[i].id+':'+invalidFields[i].validationMessage);
                }
            });
        </script>
    </body>
</html>

:invalid表示無效,即當填寫的內容不符合要求的時候觸發,form.querySelectorAll(“:invalid”);表示查詢表單失效的元素。
這裡寫圖片描述

(二)checkValidity()方法(常用)

一個input有許多約束條件,只有都滿足了,才返回true,只要有任意一個約束條件不滿足就返回false

<body>
    <form action="">
        <input type="text" id="username" value="" required pattern="^\d{}">
    </form>
    <script>
        var names = document.getElementById("username");
        if(names.checkValidity()){
            alert("符合驗證條件");
        }else{
            alert("不符合驗證條件");
        }
    //或者
        if(username.checkValidity()){
            alert("符合驗證條件");
        }else{
            alert("不符合驗證條件");
        }
    </script>
</body>

PS:
在HTML5中,js中一個元素的id就代表該元素的dom元素

document.getElementById("username")===username //值為true

不過不建議這樣用,容易和變數混淆。

setCustomValidity()方法(常用)

設定自定義的驗證提示資訊,用於根據validity物件中的驗證約束來覆蓋預定義的資訊。

<body>
    <form action="" method="get">
        <input type="url" oninput="checkit(this)">
        <input type="submit" value="提交">
    </form>
    <script>
        function checkit(obj) {
            var it = obj.validity;
            if(it.typeMismatch === true){
                obj.setCustomValidity("請輸入帶http://的網站");
            }
        }
    </script>
</body>

這裡寫圖片描述

三、HTML5<input>標籤部分型別的限制和去除預設樣式

(一)input[type=search]

1.去除預設按鈕

這裡寫圖片描述

<head>
<meta charset="UTF-8" />
<style>
    input[type="search"]::-webkit-search-cancel-button{
        -webkit-appearance:none; //去除瀏覽器的預設樣式
        height: 12px;
        width: 12px;
        background-color: red;
    }
</style>
</head>
<body>
    <form action="#">
    <input type="search" name="search" id="search" />
    <br>
    <br>
    <input type="submit"/>
    </form>
</body>

去除瀏覽器預設樣式並自定義
這裡寫圖片描述

(二)input[type=number]

1.去除預設的上下按鈕

這裡寫圖片描述

<style>
    input[type="number"]::-webkit-inner-spin-button{
        -webkit-appearance:none;
    }
</style>
</head>
<body>
    <form action="#">
    <input type="number" name="number" id="number" placeholder="請輸入數字" />
    <br>
    <br>
    <input type="submit"/>
    </form>
</body>

這裡寫圖片描述

2.限制input[type=number]輸入內容的長度

input[type=number]無法像input[type=text]那樣使用maxlength屬性來限制輸入內容的最大長度。

<input type="number" name="number" id="number" maxlength="4" placeholder="請輸入數字" />

這裡寫圖片描述

解決方法:
使用js控制

<style>
    input[type="number"]::-webkit-inner-spin-button,
    input[type="number"]::-webkit-outer-spin-button{
        -webkit-appearance:none;
    }
</style>
</head>
<body>
    <form action="#">
    <input type="number" name="number" id="number" oninput="checkLength(this,4)" placeholder="請輸入數字" />
    <br>
    <br>
    <input type="submit"/>
    </form>
    <script type="text/javascript">
        function checkLength(obj,length){
            if(obj.value.length>length){
                obj.value = obj.value.substr(0,length);
            }
        }
    </script>
</body>

這裡寫圖片描述

3.輸入的內容保留小數

<input type="number" name="number" step="0.01" id="number" oninput="checkLength(this,4)" placeholder="請輸入數字" />

step=”0.01”保留2位小數
step=”0.001”保留3位小數

四、使用偽類選擇器對HTML5表單進行美化

常用的偽類選擇器有:

偽類 說明 偽類 說明
:required 選擇所有必填表項 :optional 選擇所有選填項
:in-range 選擇值符合min和max約束的項 :out-of-range 選擇值不符合min和max約束的項
:valid 選擇符合所有約束的項 :invalid 選擇有約束不符合的項
:read-only 選擇只讀的項 :read-write 選擇可編輯的(包括含有contenteditable屬性)的項

(一):required 和 :optional 美化表單

這裡會用到::before和::after偽元素
偽元素簡單案例

.tip{
    margin-top: 30px;
}
.tip>span{
    position: relative;
    display: inline-block;
}
.tip>span:hover{
    cursor: pointer;
}
.tip>span:hover::before{
    content: attr(data-info);
    position: absolute;
    margin-left: 8px;
    padding: 10px;
    background-color: #aa0088;
    color: #FFF;
    left: 100%;
    top: -60%;
    white-space: pre; 
}
.tip>span:hover::after{
    content: '';
    position: absolute;
    width: 0;
    height: 0;
    border-right: 8px solid #aa0088;
    border-top: 8px solid transparent;
    border-bottom: 8px solid transparent;
}
<div class="tip">
    <span data-info="這是提示內容">滑鼠懸浮顯示提示</span>
</div>

表單美化案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>:required和:optional美化表單</title>
    <style>
        *{margin: 0;padding: 0;}
        .container{width: 400px;margin: 30px auto;}
        input,select,textarea{
            width: 240px;
            margin: 10px 0;
            border:1px solid #999;
            padding: .5em 1em;
        }
        input:focus,select:focus,textarea:focus{
            outline: 0;
        }
        label{color: #999;margin-left: 30px;}

        /*必填項*/
        input:required,textarea:required{
            border-right: 3px solid #FF3030;
        }
        input:required:focus,textarea:required:focus{
            box-shadow: 0 0 3px 1px #FF3030;
        }
        input:required+label::after{
            content: "(必填)";
        }
        /*選填項*/
        input:optional,select:optional{
            border-right: 3px solid #66ccff;
        }
        input:optional:focus,select:optional:focus{
            box-shadow: 0 0 3px 1px #66ccff;    
        }
        input:optional+label::after{
            content: "(選填)";
        }

        input[type="submit"]{
            background-color: #FF3030;
            border: 3px solid #FF3030;
            color: #FFF;
        }
        input[type="submit"]:hover{
            background-color: #FF0000;
        }
    </style>
</head>
<body>
    <div class="container">
        <form action="#">
            <input type="text" name="username" required /><label>使用者名稱</label>
            <input type="email" name="email" required /><label>郵箱</label>
            <input type="tel" name="tel"><label>手機號</label>
            <input type="url" name="url"><label>網址</label>
            <select name="aihao">
                <option value="0">非必填選項1</option>
                <option value="1">非必填選項2</option>
                <option value="2">非必填選項3</option>
                <option value="3">非必填選項4</option>
                <option value="4">非必填選項5</option>
            </select>
            <textarea name="content" cols="30" rows="10" placeholder="留言(必填)" required></textarea>
            <input type="submit" />
        </form>
    </div>
</body>
</html>

(二):valid和invalid美化表單驗證

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title></title>
    <style type="text/css">
        *{margin: 0;padding: 0;}
        .container{
            width: 600px;
            margin: 30px auto;
        }
        form>.form-group{
            position: relative;
        }
        input{
            width: 240px;
            height: 20px;
            line-height: 20px;
            padding: .5em 1em;
            outline: 0;
            text-indent: 30px;
            border-radius: 6px;
        }
        input+label{
            position: absolute;
            top: 6px;
            left: 10px;
        }
        input,input+label{
            transition: all .4s;
        }
        input:valid{
            border: 1px solid #C0FF3E;
        }
        input:invalid{
            border: 1px solid #aa0088;
        }
        input:hover,input:focus,input:valid{
            text-indent: 0px;
        }
        input:hover+label,input:focus+label,input:valid+label{
            transform: translateX(-150%);
        }

        input:valid~span.tip::after{
            content: attr(data-right-tip);
        }
        input:invalid~span.tip::after{
            content: attr(data-error-tip);
        }

    </style>
</head>
<body>
    <div class="container">
        <form action="#">
            <div class="form-group">        
                <input type="email" id="email" name="email" required autocomplete="off" placeholder="請輸入郵箱" />
                <label for="email">郵箱</label>
                <span class="tip" data-right-tip="您輸入郵箱正確" data-error-tip="你輸入郵箱錯誤"></span>
            </div>
        </form>     
    </div>
</body>
</html>

這裡寫圖片描述
這裡寫圖片描述

五、HTML5自帶表單驗證常用事件

常用的三個事件:

事件 說明
oninput 實施監聽input框中的輸入的值
oninvalid 當輸入的值不符合驗證約束觸發
onchange onchange 當文字框失去焦點時,檢查input裡的值是否符合要求,執行函式
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>常用表單事件</title>
    <style>
        .container{
            width: 600px;
            margin: 40px auto;
        }
        form>div.form-group{
            margin-bottom: 30px;
        }
        input,select{
            width: 240px;
            padding:5px;
            height: 40px;
            line-height: 40px;
            box-sizing: border-box;
            border-radius: 7px;
            outline: 0;
            border: 1px solid #999;
        }
        input:valid{
            border: 1px solid #00FF00;
        }
        input:focus:invalid{
            border: 1px solid #FF0000;
        }
        input[type="submit"]{
            height: 30px;
            padding: 5px;
            line-height: 30px;
            border: 1px solid #999;
        }
    </style>
</head>
<body>
    <div class="container">
        <form action="#">
            <div class="form-group">
                <label for="username">手機</label>
                <input type="text" name="username" id="username" pattern="^1[0-9]{10}$" placeholder="請輸入手機號碼" required oninput="this.setCustomValidity('')" oninvalid="this.setCustomValidity('請輸入正確手機號碼!')" />
            </div>
            <div class="form-group">
                <label for="passward">密碼</label>
                <input type="password" name="password" id="password" pattern="^[a-zA-Z0-9]\w{5,19}$" placeholder="請輸入密碼" required oninput="this.setCustomValidity('')" oninvalid="this.setCustomValidity('請輸入正確密碼')" onchange="checkpassword()" />
            </div>
            <div class="form-group">
                <label for="repassward">確認密碼</label>
                <input type="password" name="repassword" id="repassword" placeholder="請確認密碼" required onchange="checkpassword()" />
            </div>
            <
            
           

相關推薦

HTML5 基礎4—— HTML5屬性的使用驗證

一、HTML5表單常用屬性 這些都是比較常用的 屬性名 說明 placeholder 在輸入框無內容時顯示灰色提示 autocomplete 部分輸入框和form都可以設定自動提示 off關閉,on開啟(預設是on)

HTML5基礎indexedDB

概述 IndexedDB是HTML5規範裡新出現的瀏覽器裡內建的資料庫。 對於在瀏覽器裡儲存資料,你可以使用cookies或local storage,但它們都是比較簡單的技術,而IndexedDB提供了類似資料庫風格的資料儲存和使用方式。 儲存在IndexedDB裡的資料是永久儲存

HTML5基礎宣告、標籤、元素、屬性、格式化

宣告 <!DOCTYPE> HTML有多個版本,只有完全明白頁面中使用的HTML版本,瀏覽器才可以完全正確的顯示。 H5的宣告很簡單,如下: <!DOCTYPE html> 標籤 基礎標籤:<head> </head>、

MySQL基礎4——子查詢巢狀查詢、聯結、組合查詢

本篇主要整理查詢表、聯結表的相關內容。 一、子查詢 MySQL 4.1版本及以上支援子查詢 子查詢:巢狀在其他查詢中的查詢。 子查詢的作用: 1、進行過濾: 例項1:檢索訂購物品TNT2的所有客戶的ID = + 一般,在WHERE

linux基礎4

adding out drop 數據 關系 共享內存 文件的 top命令 動態 一 系統監控 1. 系統監視和進程控制工具—top和free1) 掌握top命令的功能:top命令是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源占用狀況,類似於Window

java基礎4

進行 cnblogs -- 結束 str 簡潔 img 是否 mage 一、調試 步驟1:設置斷點(不能在空白處設置斷點) 步驟2:啟動調試 步驟3:調試代碼(F6單步跳過) 筆記本Fn+F6(F5) 步驟4:結束調試 掌握調試的好處? 1

python基礎4:條件語句與循環語句

語句 單分支 繼續 目的 輸入 代碼 原則 src 分享 今天我們看看條件語句與循環語句。 預習: 1、使用while循環輸出1 2 3 4 5 6 8 9 10 2、求1-100的所有數的和 3、輸出 1-100 內的所有奇數 4、輸出 1-100 內的所有偶數 5、求1

python基礎4

css 就是 raw 空字符串 退出 困難 inpu number 令行 條件判斷和循環 條件判斷 計算機之所以能做很多自動化的任務,因為它可以自己做條件判斷。 比如,輸入用戶年齡,根據年齡打印不同的內容,在Python程序中,用if語句實現: age = 20 if ag

JAVA基礎4-分支語句

所有 字符 邏輯 def switch sys 如果 div 是否 分支結構: 根據條件的成立與否,選擇執行方向。 (一)if分支結構: 語句1; if(條件表達式){ 代碼塊 //條件成立時,執行的邏輯 }

mongodb基礎4備份與恢復

pro oss col mon 圖片 備份 cto ffffff 技術 1、備份2、恢復mongodb基礎(4)備份與恢復

Python基礎4:python中的特性入門篇索引,切片,連線,重複,成員操作符

在介紹列表的時候發現,有一些特性沒有提前解釋,而穿插在其中又會略顯重複和雜亂,索性在這裡來個總結。 接觸python的人不難了解到一個詞:高階特性。 其實內容並不高深,因為高階特性的產生,就是為了讓程式碼更簡介。 以下先介紹簡單的:索引,切片,連線,重複,成員操作符,以及其應用物件。 &nb

jQuery基礎4- 位置信息、事件流、事件對象、事件代理、jquery事件

發生 事件對象 就會 事件類型 add 自己 直接 pen pre 一、jQuery的位置信息 jQuery的位置信是JS的client系列、offset系列、scroll系列封裝好的一些簡便api。 1、寬度和高度 a、獲取寬度和高度,例如:

JAVA高階基礎4---List介面

List介面 List是有序的 collection(也稱為序列)。此介面的使用者可以對列表中每個元素的插入位置進行精確地控制。使用者可以根據元素的整數索引訪問元素,並搜尋列表中的元素。    List 集合裡添加了一些根據索引來操作集合元素的方

Phoenix4:phoenix中建立hbase的對映

一、實現功能 phoenix對映hbase中表,從而實現快速複雜查詢與編輯。 二、步驟 1.hbase中要有對應的表,以及資料 create 'teacher','info','contact' put 'teacher','1001','info:name','Jack' put

c基礎4

1.break。 break 會結束所有的迴圈,同時,break必須出現在迴圈體內。 2.continue。 continue會結束本次迴圈。 3.陣列。 知識點1:如果定義一個數組,一個初值都沒有賦。

pytorch基礎4-----搭建模型網路的方法

方法一:採用torch.nn.Module模組 import torch import torch.nn.functional as F #法1 class Net(torch.nn.Module): def __init__(self,n_feature,n_hidden,n_o

cesium開發基礎4快速入門

• 官網下載 https://cesiumjs.org/downloads/ • GitHub上下載 https://github.com/AnalyticalGraphicsInc/cesium • 安裝NodeJS https://nodejs.org/en/ • npm in

Halcon基礎4霍夫變換

定義:        霍夫變換是影象處理中從影象中識別幾何形狀的基本方法之一。幾何形狀包括圓,橢圓和直線等等. 霍夫變換原理:        設影象上的直線是y=x, 我們先取上面的三個點:A(0

Python基礎4——元組的定義操作

元組是Python的基本資料型別,在下面這篇文章中,我將簡單介紹一下元組的定義,常見的操作。 1. 元組的定義 Python的元組與列表類似,不同之處在於元組的元素不能修改。 在python中,元組使用小括號,列表使用方括號。 元組建立很簡單,只需要在小括號中新增元素,並使

Java基礎4物件克隆複製

以下介紹兩種不同的克隆方法,淺克隆(ShallowClone)和深克隆(DeepClone)。在Java語言中,資料型別分為值型別(基本資料型別)和引用型別,值型別包括int、double、byte、boolean、char等簡單資料型別,引用型別包括類、介面、陣列等複雜型別