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

Posted

技术标签:

【中文标题】如何以编程方式显示 HTML5 客户端验证错误气泡?【英文标题】:How to programmatically display HTML5 client-side validation error bubbles? 【发布时间】:2012-01-07 05:21:56 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

如果你说的是这个泡泡:

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

...然后我的测试表明 Firefox 和 Chrome 在调用 checkValidity 在包裹在

(testcase) 中的元素上时都会显示它,但是 不在独立元素上 (testcase)。

似乎没有一种机制可以在没有表单时显示它,并且必须显示规范 doesn't even say 以响应编程的 checkValidity 调用(在元素或表单上)——仅提交表单时。

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

更好的是,使用您自己的验证 UI,这将保护您免受未来在这个未指定区域的浏览器的更改。

【讨论】:

谢谢。在我看来,无论是在元素上还是在表单上,​​调用 checkValidity 时都显示气泡;它们似乎仅在提交表单时显示,可能与 onsubmit 事件一起显示(您可以从处理程序返回 false 以防止实际提交事件)。 这个接受的答案不正确。 Chrome 19、20、21 在调用element.checkValidity() 时不显示验证气泡;当用户单击提交表单的按钮时,第一个出错的元素会在气泡中显示该错误。 @ScottR:请参阅修改后的答案中的测试用例。我不确定您为什么认为答案不正确。 单击&lt;button&gt; 元素会提交表单,这会触发错误消息的可见性。 checkValidity() 调用不是导致消息出现的原因;将return false; 添加到onclick 代码的末尾将防止出现错误消息,因为点击事件不会冒泡到表单(然后会触发提交事件)。 spec 表示按钮的默认typesubmit,如果将其更改为type="button",它也可以防止错误显示。 @ScottR:感谢您的澄清!我没有验证你的理论,但它似乎是正确的。 (虽然不知道这种情况下的礼仪是什么!)【参考方案2】:

尝试使用required="required" 并摆脱oninvalid 处理程序,除非你真的需要它。

http://blog.mozilla.com/webdev/2011/03/14/html5-form-validation-on-sumo/

此工作示例:https://support.mozilla.com/en-US/users/register

【讨论】:

其实required="required"就够了。【参考方案3】:

只需手动将“无效”属性设置为不正确的字段。 小例子:

var form = $('#myForm').get(0);
if(typeof formItem.checkValidity != 'undefined' && !formItem.checkValidity()) 
    $('input:required').each(function(cnt, item) 
        if(!$(item).val()) 
            $(item).attr('invalid', 'invalid');
        
    );
    return false;

【讨论】:

以上是关于如何以编程方式显示 HTML5 客户端验证错误气泡?的主要内容,如果未能解决你的问题,请参考以下文章

iOS Safari:默认验证气泡消息未正确对齐

如何以编程方式为BasicHttpBinding指定HTTPS?

当验证器返回“无效”时,如何以编程方式在 TextInput 上显示工具提示?

以编程方式使用证书身份验证配置 WCF 服务客户端

以编程方式将验证规则附加到表单字段

如何以编程方式验证 JPQL(JPA 查询)