1. 增强型表单
1.1. 增强型表单第一组 -- 新的 input type 类型
<input type=? />H5之前的input type类型text,password,radio,checkbox,file,hidden,submit,reset,button,image
H5新增的input type类型email,number,url,search,tel,range,color,date,month,week
1.2. 增强型表单第二组 -- 新的表单元素
-
H5之前的表单元素input,select / option,textarea,button
-
H5新增的表单元素-
datalist: 数据列表, 本身不可见, 用于为其他的input提供输入建议列表-
Ex:
<datalist id='lunch'> <option value='yxrs'>鱼香肉丝</option> <option value='jjrs'>京酱肉丝</option> <option value='qjrs'>青椒肉丝</option> <option value='fqcd'>番茄炒蛋</option> </datalist> 您的晚餐: <input type='text' list='lunch' />- 展示效果:
- 展示效果:
-
-
progress: 进度条<progress></progress>: 左右晃动的进度条<progress value='0.5'></progress>: 具有指定进度百分比的进度条
-
meter: 刻度尺, 衡量尺; 以 '红黄绿' 三种颜色表示一个值所处的范围: '警告 / 不可接受', '可以接受', '最优范围'-
<meter min='可能的最小值' max='可能的最大值' low='合理的下限' high='合理的上限' optimum='最优值' value='当前实际值'></meter> -
最优值在
low和high之间: 黄 - 绿 - 黄- Ex: 0 <=
value<= 29 黄色, 30 <=value<= 70 绿色, value > 70 黄色<meter min='0' max='100' low='30' optimum='55' high='70' value='0'></meter>
- Ex: 0 <=
-
最优值在
low之下: 绿 - 黄 - 红- Ex: 0 <=
value<= 100 绿色, 101 <=value<= 300 黄色, 301 <=value红色<meter min='0' max='500' low='100' optimum='10' high='300' value='0'></meter>
- Ex: 0 <=
-
最优值在
hige之上: 红 - 黄 - 绿- Ex: 0 <=
value<= 19999 红色, 20000 <=value<= 69999 黄色, 70000 <=value绿色<meter min='0' max='100000' low='20000' optimum='90000' high='70000' value='0'></meter>
- Ex: 0 <=
-
-
output: 输出值, 典型的语义标签, 表明其中的内容是其他值经过运算后得到的输出结果, 默认样式与span相同
-
1.3. 增强型表单第三组 -- 表单元素新属性
-
H5之前的表单元素属性id,class,style,title,name,value,type,checked,selected,disabled,readonly
-
H5新增的表单元素属性-
普通的表单属性
-
autofocus: 布尔值, 是否自动获取输入焦点<input autofocus />
-
placeholder: 字符串, 在输入框中没有提示输入时的占位性质的提示文字, 与value不同, 不能用于提交
-
<input placeholder="提示性文字" />
-
multiple: 布尔值, 是否允许存在多个值, 一般需要和特殊的输入组合使用, Ex:<input type='file' />
-
<input type='file' multiple />
form: 字符串, 用于指定当前输入域( 这里的输入域一般指放在form元素之外的表单元素 ) 所属表单
<form id="formTest"> ...... </form> <input form="formTest" /> -
-
与输入验证相关的表单元素属性
required: 布尔值, 验证表单元素必填项, 不允许为空<input required />
minlength: 限定表单元素输入的最小长度( 在有输入的情况下 )<input minlenght='6' />
maxlength: 限定表单元素输入的最大长度( 在有输入的情况下 )<input maxlength="9" />
min: 限定表单元素输入的数值的最小值<input min="18" />
max: 限定表单元素输入的数值的最大值<input max="60" />
pattern: 正则表达式验证, 可以省略^和$<input pattern="1[3578]\d{9}" />
-
1.4. H5 新增与验证相关的 JS 对象级属性
-
input.validity{ // 验证输入框的输入的有效性 badInput: false, // 无效的输入, Ex: emial 输入无效 customError: false, // 是否存在自定义错误 patternMismatch: false. // 不匹配指定的正则表达式 rangeOverflow: false, // 值 上溢出, 输入的数字值超过 max rangUnderflow: false, // 值 下溢出, 输入的数字值小于 min stepMismatch: false, // 步长不匹配 tooLong: false, // 内容太长, 输入的内容超过了 maxlength 限制 tooShort: false, // 内容太短, 输入的内容不满足 minlength 限制 typeMismatch: false, // 类型不匹配, Ex: number 中出现字符 valueMissing: false, // 值缺失, Ex: required 验证失败 valid: true // 当前输入值有效 }-
上述的属性值与
H5的表单验证相关属性相对应, 若违反了某个验证属性, 上述属性之一就会变成true-- 使用这些属性可以实现不读取value, 对输入进行验证 -
注意:
- 最后的
validity.valid属性, 只有其他属性都为false( 没有任何错误 ),valid的值才为true; 只要任何一个其他属性的值为false,valid的值就为false - 上述属性的值会随着输入域中值的变化而立即变化, 无需等到表单提交
- 使用
input.setCustomValidity('xxx')可以生成一条自定义错误消息, 使得validity.customError属性值为true, 若执行input.setCustomValidity('')可以删除自定义错误消息, 是的validity.customError的属性值为false - 自定义错误消息的优先级高于任何系统自带的错误消息
- 最后的
-
Ex:
<form> 登录名称: <input type="text" name="txtUname" id="txtUname" required /></br> 登录密码: <input type="password" name="pwdUser" id="pwdUser" minlength="6" maxlength="12" /></br> 用户年龄: <input type="number" name="numAge" id="numAge" min="18" max="30" /> <span class="ageValidText"></span></br> <input type="submit" /> </form> <script type="text/javascript"> var uName = document.getElementById('txtUname') var numAge = document.getElementById('numAge') // 登录名添加验证 uName.addEventListener('blur', function () { // H5 之前的输入验证 // if (this.value.length === 0) { ...... } // H5 中的输入验证 if (this.validity.valueMissing) { var errMsg = '登录名不能为空' alert(errMsg) this.setCustomValidity(msg) } else { this.setCustomValidity('') // 清除自定义错误消息 } }) // 年龄添加验证 numAge.addEventListener('blur', function () { if (this.validity.rangeUnderflow) { var msg = '用户的年龄太小了' } else if (this.validity.rangeOverflow) { var msg = '用户的年龄太大了' } else { var msg = '' } this.nextElementSibling.innerHTML = msg this.setCustomValidity(msg) }) </script>
-