1. 程式人生 > >JavaScript 表單、約束驗證 DOM 屬性

JavaScript 表單、約束驗證 DOM 屬性

reference 輸入數據 tom 無效 ntb validity 偽類選擇器 htm ons

1.JavaScript 表單

1.1JavaScript 表單驗證

HTML 表單驗證可以通過 JavaScript 來完成。

以下實例代碼用於判斷表單字段(fname)值是否存在,如果存在,則彈出信息,否則阻止表單提交:

function validateForm() {
    var x = document.forms["myForm"]["fname"].value;
    if (x == null || x == "") {
        alert("需要輸入名字。");
        return false;
    }
}

以上 JavaScript 代碼可以通過 HTML 代碼來調用:

<form name="myForm" action="demo_form.php" onsubmit="return validateForm()" method="post">
名字: <input type="text" name="fname">
<input type="submit" value="提交">
</form>

1.2HTML 表單自動驗證

HTML 表單驗證也可以通過瀏覽器來自動完成。

如果表單字段 (fname) 的值為空, required 屬性會阻止表單提交:

<form action="demo_form.php
" method="post"> <input type="text" name="fname" required="required"> <input type="submit" value="提交"> </form>

1.3數據驗證

數據驗證用於確保用戶輸入的數據是有效的。

典型的數據驗證有:

  • 必需字段是否有輸入?
  • 用戶是否輸入了合法的數據?
  • 在數字字段是否輸入了文本?

大多數情況下,數據驗證用於確保用戶正確輸入數據。

數據驗證可以使用不同方法來定義,並通過多種方式來調用。

服務端數據驗證是在數據提交到服務器上後再驗證。

客戶端數據驗證 side validation

是在數據發送到服務器前,在瀏覽器上完成驗證。

1.4HTML 約束驗證

HTML5 新增了 HTML 表單的驗證方式:約束驗證(constraint validation)。

約束驗證是表單被提交時瀏覽器用來實現驗證的一種算法。

HTML 約束驗證基於:

  • HTML 輸入屬性
  • CSS 偽類選擇器
  • DOM 屬性和方法

約束驗證 HTML 輸入屬性

屬性描述
disabled 規定輸入的元素不可用
max 規定輸入元素的最大值
min 規定輸入元素的最小值
pattern 規定輸入元素值的模式
required 規定輸入元素字段是必需的
type 規定輸入元素的類型

約束驗證 CSS 偽類選擇器

選擇器描述
:disabled 選取屬性為 "disabled" 屬性的 input 元素
:invalid 選取無效的 input 元素
:optional 選擇沒有"required"屬性的 input 元素
:required 選擇有"required"屬性的 input 元素
:valid 選取有效值的 input 元素

1.5E-mail 驗證

意思就是說,輸入的數據必須包含 @ 符號和點號(.)。同時,@ 不可以是郵件地址的首字符,並且 @ 之後需有至少一個點號:

function validateForm(){
  var x=document.forms["myForm"]["email"].value;
  var atpos=x.indexOf("@");
  var dotpos=x.lastIndexOf(".");
  if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length){
    alert("不是一個有效的 e-mail 地址");
    return false;
  }
}
<form name="myForm" action="demo-form.php" onsubmit="return validateForm();" method="post">
    Email: <input type="text" name="email">
    <input type="submit" value="提交">
</form>

2.JavaScript 驗證 API

2.1約束驗證 DOM 方法

PropertyDescription
checkValidity() 如果 input 元素中的數據是合法的返回 true,否則返回 false。
setCustomValidity()

設置 input 元素的 validationMessage 屬性,用於自定義錯誤提示信息的方法。

使用 setCustomValidity 設置了自定義提示後,validity.customError 就會變成true,則 checkValidity 總是會返回false。如果要重新判斷需要取消自定義提示,方式如下:

setCustomValidity(‘‘) 
setCustomValidity(null) 
setCustomValidity(undefined)

以下實例如果輸入信息不合法,則返回錯誤信息:

<input id="id1" type="number" min="100" max="300" required>
<button onclick="myFunction()">驗證</button>
 
<p id="demo"></p>
 
<script>
function myFunction() {
    var inpObj = document.getElementById("id1");
    if (inpObj.checkValidity() == false) {
        document.getElementById("demo").innerHTML = inpObj.validationMessage;
    }
}
</script>

2.2約束驗證 DOM 屬性

屬性描述
validity 布爾屬性值,返回 input 輸入值是否合法
validationMessage 瀏覽器錯誤提示信息
willValidate 指定 input 是否需要驗證

2.3Validity 屬性

input 元素的 validity 屬性包含一系列關於 validity 數據屬性:

屬性描述
customError 設置為 true, 如果設置了自定義的 validity 信息。
patternMismatch 設置為 true, 如果元素的值不匹配它的模式屬性。
rangeOverflow 設置為 true, 如果元素的值大於設置的最大值。
rangeUnderflow 設置為 true, 如果元素的值小於它的最小值。
stepMismatch 設置為 true, 如果元素的值不是按照規定的 step 屬性設置。
tooLong 設置為 true, 如果元素的值超過了 maxLength 屬性設置的長度。
typeMismatch 設置為 true, 如果元素的值不是預期相匹配的類型。
valueMissing 設置為 true,如果元素 (required 屬性) 沒有值。
valid 設置為 true,如果元素的值是合法的。
<input id="id1" type="number" max="100">
<button onclick="myFunction()">驗證</button>
 
<p id="demo"></p>
 
<script>
function myFunction() {
    var txt = "";
    if (document.getElementById("id1").validity.rangeOverflow) {
       txt = "輸入的值太大了";
    }
    document.getElementById("demo").innerHTML = txt;
}
</script>
如果輸入的值小於 100,顯示一個信息:
<input id="id1" type="number" min="100" required>
<button onclick="myFunction()">OK</button>
 
<p id="demo"></p>
 
<script>
function myFunction() {
    var txt = "";
    var inpObj = document.getElementById("id1");
    if(!isNumeric(inpObj.value)) {
        txt = "你輸入的不是數字";
    } else if (inpObj.validity.rangeUnderflow) {
        txt = "輸入的值太小了";
    } else {
        txt = "輸入正確";
    }
    document.getElementById("demo").innerHTML = txt;
}
 
// 判斷輸入是否為數字
function isNumeric(n) {
    return !isNaN(parseFloat(n)) && isFinite(n);
}
</script>

JavaScript 表單、約束驗證 DOM 屬性