HTML5 表单元素
HTML5 表单元素(包含在<form>标签内)
一、input新类型
1. email类型 - 验证是否包含 '@'
2. url类型 - 验证是否包含 'http://'
3. tel类型 - 在移动端显示 调出数字输入
4. number类型
5. range类型
6. date类型
7. color类型 - 点击弹出颜色选择
8. search类型 - 可以清除文本内容
9. date - 日期类型
10. week - 星期类型
11. month - 月份类型
示例:
1 <form> 2 <!-- 3 <input type="email"> 4 * 作用 - 提交表单时,验证是否包含"@" 5 * 问题 - 验证逻辑并不完整 6 --> 7 email类型:<input type="email"><br> 8 搜索类型:<input type="search"><br> 9 <!-- 10 <input type="url"> 11 * 作用 - 提交表单时,验证是否包含"http://" 12 * 问题 - 验证逻辑并不完整 13 --> 14 URL类型:<input type="url"><br> 15 <!-- 16 <input type="tel"> 17 * 注意 - 效果只能在手机端出现 18 --> 19 电话号码类型:<input type="tel"><br> 20 <!-- 21 <input type="number"> 22 * min - 最小值 23 * max - 最大值 24 * step - 步长,默认值为1 25 --> 26 数字类型:<input type="number" min="0" max="10" step="2"><br> 27 <!-- 28 <input type="range"> 29 * min - 最小值 30 * max - 最大值 31 * step - 步长 32 * value - 当前值 33 --> 34 范围类型:<input type="range" min="0" max="10" value="8" step="2"><br> 35 颜色类型:<input type="color"><br> 36 <input type="submit"> 37 </form>
示例:
1 <style> 2 .dColor{ 3 width:150px; 4 height:150px; 5 border:1px solid black; 6 background-color:rgb(200,3,5); 7 } 8 </style> 9 10 <!-- 11 需求 12 * 定义<div>元素 - 用于显示选择后的颜色 13 * 定义<input type="range">元素 - 用于选择颜色的三原色(红|蓝|绿) 14 * rgb(r,g,b) - 0-255 15 --> 16 <div class="dColor"></div> 17 红:<input type="range" id="r" min="0" max="255" /><br /> 18 绿:<input type="range" id="g" min="0" max="255" /><br /> 19 蓝:<input type="range" id="b" min="0" max="255" /><br /> 20 </body> 21 <script> 22 // 23 //当选择红|蓝|绿三原色的不同值,在<div>中显示不同颜色 24 function myChange(){ 25 //获得 红 绿 蓝 的value值 26 var r=document.getElementById("r").value; 27 var g=document.getElementById("g").value; 28 var b=document.getElementById("b").value; 29 //设置div的背景色 30 document.getElementsByClassName("dColor")[0].style.backgroundColor="rgb("+r+","+g+","+b+")"; 31 } 32 33 //绑定onchange事件 34 for (var i=0,ele; ele=["r","g","b"][i++]; ) 35 { 36 document.getElementById(ele).onchange=myChange; 37 } 38 </script>
示例:
1 //示例 2 日期类型:<input type="date"><br> 3 星期类型:<input type="week"><br> 4 月份类型:<input type="month"><br>
二、表单新元素
1.datalist 元素
2.progress 元素
3.meter 元素
4.output 元素
示例:
1 <!-- 2 datalist元素 3 * <datalist>元素 - 定义备选项(并不显示) 4 * 配合<input>元素使用 5 * 定义list属性 - 属性值等于<datalist>元素的id属性值 6 * 效果 - 和<select>下拉列表类似 7 * 特点 - 数据与结构的分离 8 * 数据 - 预定义数据内容<datalist> 9 * 结构 - 显示在HTML页面中的元素<input> 10 * 优点 - 使用<datalist>元素定义的数据,可以重复使用 11 --> 12 <datalist id="mylist"> 13 <option>请选择</option> 14 <option>北京</option> 15 <option>南京</option> 16 <option>天津</option> 17 </datalist> 18 <input type="text" list="mylist"><br>
示例:
1 <!-- 2 <progress>元素 - 进度条 3 * max - 设置进度条的最大值 4 * 没有min属性 - 最小值为0 5 * value - 表示当前的进度值 6 --> 7 <progress max="100" value="0" id="progress"></progress> 8 <br> 9 <!-- 10 <meter>元素 - 刻度 11 * min - 最小值 12 * max - 最大值 13 * value - 当前值 14 * low - 低预警值 15 * high - 高预警值 16 --> 17 <meter min="0" max="100" value="95" low="10" high="90"></meter> 18
示例:
1 <progress max="100" value="1" id="pro"></progress> 2 //进度条回滚 3 (function myChange(){ 4 var pro=document.getElementById("pro"); 5 var val=pro.value; 6 pro.value=--val; 7 val<=0&&(pro.value=100); 8 if (val>=0) 9 { 10 setTimeout(myChange,10); 11 } 12 })()
三、表单新属性
1.placeholder - 默认提示内容
2.multiple - 允许输入多个值,使用','分割
3.autofocus - 自动获取焦点
4.form - 允许表单元素定义在表单之外
示例:
1 <!-- 2 placeholder属性 3 * 作用 - 类似于value属性 4 * 区别 5 * value属性值 6 * 显示为黑色 7 * 确实存在文本框中 8 * placeholder属性值 9 * 显示为灰色 10 * 类似于背景存在 11 * 12 --> 13 <input type="text" value="请输入你的用户名"><br> 14 <input type="text" placeholder="请输入你的用户名"> 15 <br><br><br> 16 <!-- 17 multiple属性 18 * 作用 - 允许输入多个值 19 * 注意 - 多个值之间使用"," 20 * 用法 - 只定义属性名,没有属性值 21 --> 22 <input type="email" multiple> 23 <br><br> 24 <!-- 25 autofocus属性 26 * 作用 - 自动获取焦点 27 * 用法 - 只定义属性名,没有属性值 28 --> 29 <input type="text" autofocus> 30 <br><br> 31 <input type="submit"> 32 </form> 33 <!-- 34 form属性 35 * 原本的HTML页面中定义表单元素 36 * 所有的表单元素,必须定义在<form>元素中 37 * 作用 - 允许将表单元素定义在<form>元素外 38 * <form>元素外的表单元素,使用该属性 39 * form属性值等于<form>元素的id属性值 40 --> 41 <input type="password" id="pwd" form="myform">
四、表单新验证
1.验证属性
1. required 属性 - 验证当前元素是否为空
2. pattern 属性 - 使用正则表达式验证当前元素值是否匹配
*注意 - 不能验证当前元素是否为空
3. min和max属性 - 验证当前元素值最小值或最大值(一般用于number,range等元素)
4. minlength和maxlength属性
*minlength - 验证当前元素的最小长度,提交表单时验证元素最小值
*minlength并不是HTML5新元素
*maxlength - 验证当前元素值的最大长度,输入长度不能大于指定值
5. validity 属性
*表单验证HTML5提供一种有效状态
* 有效状态通过validityState对象获取到
* validityState对象可通过validity属性得到
示例:
1 <form> 2 用户名:<input type="text" id="user" required><br> 3 密码:<input type="text" id="pwd" pattern="^[a-zA-Z]{6,12}$"><br> 4 年龄:<input type="number" min="0" max="100"><br> 5 email地址:<input type="text" minlength="6" maxlength="10"><br> 6 <input type="submit"> 7 </form>
2.验证(有效)状态
* validityState对象提供了一系列的有效状态
* 通过这些有效状态,进行判断
* 注意
* 所有验证状态必须配合上述的验证属性使用
* 作用
* 用来替换原本手工实现的逻辑
1.验证状态 - valid
* valid
* 作用 - 判断当前元素值是否正确
* 注意
* 该状态返回true,表示验证成功
* 该状态返回false,表示验证失败
2.valueMissing
*作用 - 判断当前元素值是否为空
*用法 - 配合 required 属性使用
3.typeMismatch
* 作用 - 判断当前元素值的类型是否匹配
* 用法 - 配合email、number、url等
4.patternMismatch
* 作用 - 判断当前元素值是否与指定正则表达式匹配
* 用法 - 配合pattern属性使用
5.tooLong
* 作用 - 判断当前元素值的长度是否正确
* 用法 - 配合maxlength属性
* 使用maxlength属性后,实际不可能出现长度大于maxlength的值
6.rangeUnderflow
* 作用 - 判断当前元素值是否小于min属性值
* 用法 - 配合min属性
* 注意 - 并不能与max属性值进行比较
7.stepMismatch
* 作用 - 判断当前元素值是否与step设置相符
* 用法 - 配合step使用
* 注意 - 并不能与min或max属性值进行比较
8.customError
* 用法 - 配合setCustomValidity()方法
* 如果使用该方法,该状态返回true
* setCustomValidity()方法
* 作用 - 设置自定义的错误提示内容
* 问题 - 使用该方法设置错误信息
* 当输入正确时,调用该方法将信息设置为空("")
* 不能使用上述有效状态的任何一种判断输入是否正确(所有状态返回false)
示例:
1 <form> 2 用户名:<input type="text" id="user" required><br> 3 email地址:<input type="email" id="email"><br> 4 密码:<input type="text" id="pwd" pattern="^[a-zA-Z]{6,12}$"><br> 5 确认密码:<input type="text" id="repwd" maxlength="10"><br> 6 年龄:<input type="number" id="age" min="10" max="20"><br> 7 成绩:<input type="number" id="score" min="60" max="100" step="10"> 8 <input type="submit" value="注册"> 9 </form> 10 <script> 11 var user = document.getElementById("user"); 12 user.onblur = function(){ 13 if(user.validity.valueMissing){ 14 console.log("用户名不能为空."); 15 } 16 } 17 var email = document.getElementById("email"); 18 email.onblur = function(){ 19 if(email.validity.typeMismatch){ 20 console.log("email输入格式错误."); 21 } 22 } 23 var pwd = document.getElementById("pwd"); 24 pwd.onblur = function(){ 25 if(pwd.validity.patternMismatch){ 26 console.log("密码输入错误."); 27 } 28 } 29 var repwd = document.getElementById("repwd"); 30 repwd.onblur = function(){ 31 if(repwd.validity.tooLong){ 32 console.log("密码输入过长."); 33 } 34 } 35 var age = document.getElementById("age"); 36 age.onblur = function(){ 37 if(age.validity.rangeUnderflow){ 38 console.log("年龄过小,不符合!"); 39 } 40 } 41 var score = document.getElementById("score"); 42 score.onblur = function(){ 43 if(score.validity.valid){ 44 console.log("成绩输入正确."); 45 }else if(score.validity.stepMismatch){ 46 console.log("成绩输入不符."); 47 } 48 } 49 </script>
1 <form> 2 用户名:<input type="text" id="user" required> 3 <input type="submit"> 4 </form> 5 <script> 6 /* 7 * setCustomValidity()方法 8 * * 作用 - 修改验证错误后的默认提示信息 9 * * 问题 10 * * 一旦使用该方法修改默认错误提示信息后 11 * 即使输入正确,错误提示依旧存在(逻辑错误) 12 * * 解决 13 * * 判断如果用户输入正确的话,将该方法设置提示内容修改为空 14 * * 问题 15 * * 使用valid状态判断输入是否正确 16 * * 一旦使用该方法,validityState对象的所有状态都返回false 17 */ 18 var user = document.getElementById("user"); 19 user.onblur = function(){ 20 //user.value == "" || user.value == null 21 if(user.value != "" && user.value != null){ 22 user.setCustomValidity(""); 23 }else if(user.validity.valueMissing){ 24 user.setCustomValidity("用户名不能为空"); 25 } 26 } 27 </script>