IE9及以下不支持HTML5表单属性和验证API,需用webshim polyfill或手写submit拦截逻辑补全;html5shiv和Modernizr无法解决此问题。

IE 浏览器(尤其是 IE9 及以下)原生不支持 HTML5 表单属性和验证 API,required、type="email"、pattern、novalidate 等直接被忽略,checkValidity() 和 reportValidity() 也不存在。这不是“失效”,是根本没实现。
IE 不识别 HTML5 表单属性的典型表现
用户提交空的 required 输入框毫无提示;输入非法邮箱却能通过;type="number" 渲染成普通文本框且无上下箭头;调用 form.checkValidity() 报错 Object doesn't support property or method 'checkValidity'。
根本原因:IE9–10 的 DOM 实现未扩展表单元素的 HTML5 属性与方法,连 HTMLInputElement.prototype 都没有挂载这些接口。
- IE6–8:完全无 HTML5 表单概念,连
type="email"都当作type="text"处理 - IE9:支持部分语义化标签(如
article),但表单验证属性全不识别 - IE10:开始支持
placeholder,但required、pattern、验证 API 仍缺失
用 webshim lib 补全 IE 的 HTML5 表单能力
webshim 是目前最成熟、轻量(压缩后约 40KB)、且专注 polyfill 的方案,它不模拟 UI,而是注入真实验证逻辑并绑定到原生事件(如 submit、input),兼容性覆盖 IE7+。
立即学习“前端免费学习笔记(深入)”;
使用步骤:
- 引入
webshim.js和webshim.css(后者仅用于可选的错误提示样式) - 在
中启用表单模块: - 确保页面加载完 DOM 后再执行 polyfill(推荐放在










