HTML5 - 基础 & Web Forms API

杨旭 bio photo By 杨旭

HTML5为我们带来大量的简化和功能增强

新功能

新的DOCTYPE和字符集

化繁为简,简化以往复杂冗长的配置。

<!DOCTYPE html>
<html lang="en">

语义化标记

页面文件的可读性更好,更为重要的是帮助搜索引擎分析页面

  • header 页面头部区域的内容
  • footer 页面地步区域的内容
  • section 页面中的一块区域
  • article 独立的文章内容
  • aside 相关内容或引文
  • nav 导航类辅助内容

使用Selectors API简化选取操作

支持使用css选择器查询页面元素

  • querySelector - 匹配规则的第一个元素
  • querySelectorAll - 匹配规则的所有元素
document.querySelector('input.error')
document.querySelectorAll('input.error')
document.querySelector('input.error', 'lowValue')

Form

HTML5表单包含了大量的新API和元素类型,新增输入控件API,其主要目的是为了简化开发,为终端用户,特别是移动端用户提供更好的体验

输入型控件

不同的输入类型,能够让浏览器打开合适的输入控件,并利用浏览器内置的校验规则快速提供反馈。

HTML5 form updates

Example HTML5 Form with Feature Testing

最大的不同是在移动端输入时,弹出的默认输入控件

  • tel - 电话号码
  • email - 电子邮箱地址
  • url - 网页url
  • search - 站点顶部的搜索框
  • range - 范围内的数值选择器
  • number - 数字

新增属性

  • placeholder - 输入提示信息
  • autofocus - 页面加载时自动获得焦点
  • autocomplete - 记录输入历史并提供输入提示

  • spellcheck - 输入内容的拼写检查
  • list和datelist - 构造可选列表
<label>Choose a browser from this list:
<input list="browsers" name="myBrowser" /></label>
<datalist id="browsers">
  <option value="Chrome">
  <option value="Firefox">
  <option value="Internet Explorer">
  <option value="Opera">
  <option value="Safari">
  <option value="Microsoft Edge">
</datalist>

  • min和max - range输入的最大和最小值
  • step - range控件每次变更的最小跨度
  • required - 输入框是否必须输入,结合表单验证使用

表单验证

验证事件

当浏览器内置当校验规则发现输入内容非法时,会触发invalid事件

function haneler(event) {
    // error handle
}

inputElement.addEventListener('invalid', handler)

验证状态

从事件对象中可以获取validity对象,包含各种校验规则对应的校验状态。

  • valueMissing - 设置了required属性后,判断内容是否填写
  • typeMismatch - 确保输入内容与类型匹配
  • patternMismatch - 如果表单设置了pattern,校验输入内容是否满足规则
  • maxLength - 如果设置了maxLength,判断输入内容是否过长
  • rangeUnderflow - range的输入值小于min属性的值
  • rangeOverflow - range的输入值大于max属性的值
  • stepMismatch - range的输入值不复合min、max、step的限制
  • customError - 调用setCustomValidity(message)将表单控件设置为error状态

关闭验证

如果想关闭表单的默认验证行为,有两种方式:

  • submit按钮增加formnovalidate属性
  • form节点上增加noValidate属性

表单样式

表单验证功能会给form表单添加css伪类

  • valid - 校验通过
  • invalid - 任何校验不通过
  • in-range - range元素的值在min和max之间
  • out-of-range - range元素的值在min和max之外
  • required - 被标记为必填的字段
  • optional - 没有被标记为必填的字段