如何以编程方式显示HTML5客户端验证错误气泡?

17 validation html5

我正在尝试在表单/提交上下文之外使用HTML5客户端验证,但无法看到如何显示验证错误气泡.考虑以下:

<input type="text" id="input" pattern="[0-9]" required oninvalid="alert('yes, invalid')">
<button onclick="alert(document.getElementById('input').checkValidity())">Check</button>
Run Code Online (Sandbox Code Playgroud)

一切都按预期工作,从checkValidity返回正确的值,并发送和显示无效事件,但如何以编程方式显示验证错误气泡?

Nic*_*lay 5

如果你在谈论这个泡沫:

Firefox中的验证泡泡

请参阅ScottR对此答案的评论.

...然后我的测试显示Firefox和Chrome在调用checkValidity 包含在<form>(测试用例)中的元素时显示它,但不在独立元素(testcase)上显示.

似乎没有一种机制可以在没有表格的情况下显示它,并且规范甚至没有说它必须显示以响应程序化checkValidity调用(在元素或表单上) - 仅在提交表单时.

所以现在,将您的元素包装在一个表单中,即使您实际上不会提交它.

更好的是,使用您自己的验证用户界面,这将使您免受此未指定区域中浏览器的未来更改.

  • 这个接受的答案是不正确的.当调用`element.checkValidity()`时,Chrome 19,20和21不会显示验证气泡.当用户单击提交表单的按钮时,带有错误的第一个元素会在气泡中显示该错误. (4认同)
  • 单击"<button>"元素提交表单,这将触发错误消息的可见性.`checkValidity()`调用不是导致消息出现的原因; 在`onclick`代码的末尾添加`return false;`将阻止出现错误消息,因为click事件不会冒泡到表单(然后会触发提交事件).[spec](http://www.w3.org/TR/html401/interact/forms.html#h-17.5)声明按钮的默认`type`是`submit`,如果你把它更改为`type ="button"`,它还可以防止错误显示. (4认同)