十四、JavaScript表單中的驗證API

@Author:Runsen
@Date:2020/5/30

作者介紹:Runsen目前大三下學期,專業化學工程與工藝,大學沉迷日語,Python, Java和一系列數據分析軟件。導致翹課嚴重,專業排名中下。.在大學60%的時間,都在CSDN。決定今天比昨天要更加努力。

我要反覆查漏補缺,將2018年的東西撿回來,形成高效學習。

今天,我要寫的是JavaScript表單中的驗證API,寫之前,先去W3C教程看看,偷窺學習一下JavaScript表單中的驗證API。

表單標籤

在HTML中,表單是由<form>元素來表示的,<input>就是用戶輸入的標籤。其實在有一些<input>輸入類型本身就擁有一些內在的約束。將 type 設置爲 “email”, “number” 或者 “URL” 的話,就會自動檢查輸入的值是否是有效的電子郵件地址、數字或者 URL, 例如:

<input type="email">

HTML 表單實例

這是來自W3C教程的例子。這裏我不知道document.forms["myForm"]["fname"].value的用法,所以拿過來。

<!DOCTYPE html>
<html>
<head>
<script>
function validateForm() {
  // document.forms["myForm"]["fname"].value 都是name
  var x = document.forms["myForm"]["fname"].value;
  if (x == "") {
    alert("必須填寫姓名!");
    return false;
  }
}
</script>
</head>
<body>

<form name="myForm" action="/demo/action_page.php" οnsubmit="return validateForm()" method="post">
  姓名:<input type="text" name="fname">
  <input type="submit" value="提交">
</form>

</body>
</html>

驗證數字輸入

下面驗證輸入的是不是成績,要求就是成績必須在0-100之間,效果如下gif所示。

失去焦點

所謂焦點,就是鼠標移上文本框的時候那個一閃一閃的光標, 失去焦點用戶就是要輸入。onblur就是失去焦點事件,通過$("score").value獲取輸入的內容。

判斷是不是數值

獲取輸入的內容,就是一個parseFloat判斷是不是數值,然後就是添加class,修改樣式。

封裝函數

由於三次判斷需要處理公共的樣式,那麼就直接寫一個dealStyle函數。當輸入框獲得焦點,也需要一個函數。

代碼

具體代碼如下。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
        #prompt{
            font-size: 13px;
            color: darkgray;
        }
        #score{
            border:1px solid darkgray;
        }
        .right{
            background-size:15px 15px;
            padding-left: 20px;
            color: lightgreen !important;
        }
        .error{
            background-size:15px 15px;
            padding-left: 20px;
            color: red !important;
        }
    </style>
</head>
<body>
    <div id="box">
        <label>您的成績:</label>
        <input id="score" type="text" placeholder="請輸入分數">
        <span id="prompt">請輸入您的成績!</span>
    </div>
<script>
    window.onload = function () {
        // 當輸入框失去焦點
        $('score').onblur = function () {
            // 1. 獲取輸入的內容
            var value = parseFloat($("score").value);
            // 2.驗證
            if(isNaN(value)){ // 不是一個數
               /* $('prompt').innerText = "輸入成績不正確";
                $('prompt').className = 'error';
                $('score').style.borderColor = 'red';*/
                dealStyle('輸入成績不正確', 'error', 'red');
            }else if(value >= 0 && value <= 100){ // 合法的
                /*$('prompt').innerText = "輸入成績正確";
                $('prompt').className = 'right';
                $('score').style.borderColor = 'lightgreen';*/
                dealStyle('輸入成績正確', 'right', 'lightgreen');
            }else { // 超出
                /*$('prompt').innerText = "成績必須在0-100之間";
                $('prompt').className = 'error';
                $('score').style.borderColor = 'red';*/
                dealStyle('成績必須在0-100之間', 'error', 'red');
            }
        };

        // 當輸入框獲得焦點
        $('score').onfocus = function () {
            /*$('prompt').innerText = "請輸入您的成績!";
            $('prompt').className = '';
            $('score').style.borderColor = 'darkgray';*/
            $('score').style.outline = 'none';
            $('score').value = '';
            dealStyle("請輸入您的成績!", '', 'darkgray');
        };
        /**
         * 處理公共的樣式
         * @param {string}msg
         * @param {string}className
         * @param {string}color
         */
        function dealStyle(msg, className, color) {
            $('prompt').innerText = msg;
            $('prompt').className = className;
            $('score').style.borderColor = color;
        }
    };
    function $(id) {
        return typeof id === "string" ? document.getElementById(id) : null;
    }
</script>
</body>
</html>

這是你會好奇$('score').,其實這是jQuery 的寫法,由於沒有導入jQuery,所以定義了function $(id) 的函數。

驗證API

還有很多驗證API,比如常見的checkValidity和setCustomValidity

屬性 描述
checkValidity() 返回 true,如果 input 元素包含有效數據
setCustomValidity() 設置 input 元素的 validationMessage 屬性。

具體的查看W3C教程,我不想照搬。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章