【HTML5新表單】
1.type:
- email :
驗證邏輯不完整,只驗證是否包含 @ ;
- search :
- url :
驗證邏輯不完整,只判斷是否包含 http:// ;
- tel :
電話號碼類型:
只能在移動端有效果,會彈出數字鍵盤;只能輸入數字;
pc端,可以輸入英文;
- number :
數字類型:3個屬性;
min:
max:
step: 默認值1;
- range :
范圍類型:
min:
max:
step:
value:當前值;
- color :
顏色類型:取色器;
- date :
日期類型;
- week : 周
- month : 月
2.新表單元素
- datalist元素
定義備選項,與option
與input text搭配使用,input的list屬性指向datalist的id;
特點:
數據與結構分離;預定義數據在datalist,結構input;
<datalist id="mylist">
<option>請選擇</option>
<option>北京</option>
<option>南京</option>
<option>天津</option>
</datalist>
<input type="text" list="mylist"><br>
- progress元素
進度條;
不同浏覽器效果不同;2屬性;
- max 沒有min屬性,最小默認為0;
- value 當前進度值;
<progress max="100" value="0" id="progress"></progress>
<script>
function mychange(){
var progress = document.getElementById("progress");
var value = progress.value;
value++;
progress.value = value;
if(value == 100){
clearTimeout(t);
}
t = setTimeout("mychange()",100);
}
mychange();
</script>
- meter元素
刻度;
- min
- max
- value
- low 低預警值
- high 高預警值
- output元素
輸出;
for屬性
3.表單新屬性
- placeholder屬性:
類似於value; placeholder="請輸入用戶名";
默認文本是灰色,並且 文本框獲取焦點,輸入時,默認文字自動消除;
- multiple屬性:
允許文本框中輸入多個值,用","隔開;
只定義屬性名,沒有屬性值
- autofocus屬性
自動獲取焦點
只定義屬性名,沒有屬性值
- form屬性
值等於表單元素的id值;
允許表單元素定義在表單之外;
4.表單新驗證
1.驗證屬性
- required :
驗證為空;
提交時才提示;
- pattern :
不要斜線;pattern="[a-z]{6,12}"
使用正則表達式驗證元素值是否匹配;
驗證不了空;
提交時才提示;
- min max
驗證當前元素值的最小值和最大值;
適用於type=number類型
提交時才提示;
- minlength maxlength
驗證當前元素值的最小長度和最大長度;
提示是英文的;
minlength:提交時才提示;不是H5的新屬性;
maxlength:輸入時長度就不能大於指定值;
- validity
表單驗證在H5中提供一個有效狀態;有效狀態通過validityState對象獲取到,
validityState對象可以通過validity屬性得到;
2.驗證(有效)狀態
validityState對象提供一系列有效狀態
***所有驗證狀態要配合驗證屬性使用;
- valid
元素所有"驗證都通過"就返回true;
Elem.validity.valid;
以下驗證返回true,都是驗證錯誤;
- valueMissing
判斷當前元素值是否為空。返回true false;
配合required使用;
Elem.validity.valueMissing;
- typeMismatch
判斷當前元素是否匹配類型type;返回true false;
配合email,number,url使用;
email.validity.typeMismatch;
- patternMismatch
判斷當前元素是否匹配正則表達式;返回true false;
配合pattern使用;
Elem.validity.patternMismatch;
- tooLong
判斷當前元素是否匹配長度;返回true false;
配合maxlength;
**使用maxlength屬性後,長度不會超出maxlength的值,tooLong很難出現這種情況;****邏輯完整性;
- rangeUnderflow
輸入內容值小於min的值時,返回true;
只能匹配min 不能與max比較;
Elem.validity.rangeUnderflow;
- stepMismatch
判斷當前元素值是否與step設置相同;
只能匹配step,不和min max比較;
Elem.validity.stepMismatch;
- customError
配合setCustomValidity()方法使用;只要用了此方法,customError就返回true;
setCustomValidity():
作用:設置驗證失敗後的默認提示信息;
問題:一旦使用該方法修改默認提示信息後,即使輸入正確,錯誤提示信息依舊出現;
解決:當輸入正確時,調用該方法將信息設置為空"";
<!DOCTYPE html>
<html>
<head>
<title>表單驗證狀態(完整)</title>
<meta charset="utf-8" />
</head>
<body>
<form>
用戶名:<input type="text" id="user" required><br>
email地址:<input type="email" id="email"><br>
密碼:<input type="text" id="pwd" pattern="^[a-zA-Z]{6,12}$"><br>
確認密碼:<input type="text" id="repwd" maxlength="10"><br>
年齡:<input type="number" id="age" min="10" max="20"><br>
成績:<input type="number" id="score" min="60" max="100" step="10">
<input type="submit" value="注冊">
</form>
<script>
var user = document.getElementById("user");
user.onblur = function(){
if(user.validity.valueMissing){
console.log("用戶名不能為空.");
}
}
var email = document.getElementById("email");
email.onblur = function(){
if(email.validity.typeMismatch){
console.log("email輸入格式錯誤.");
}
}
var pwd = document.getElementById("pwd");
pwd.onblur = function(){
if(pwd.validity.patternMismatch){
console.log("密碼輸入錯誤.");
}
}
var repwd = document.getElementById("repwd");
repwd.onblur = function(){
if(repwd.validity.tooLong){
console.log("密碼輸入過長.");
}
}
var age = document.getElementById("age");
age.onblur = function(){
if(age.validity.rangeUnderflow){
console.log("年齡過小,不符合!");
}
}
var score = document.getElementById("score");
score.onblur = function(){
if(score.validity.valid){
console.log("成績輸入正確.");
}else if(score.validity.stepMismatch){
console.log("成績輸入不符.");
}
}
</script>
</body>
</html>