一种检查 HTML5 表单有效性的方法?

Posted

技术标签:

【中文标题】一种检查 HTML5 表单有效性的方法?【英文标题】:a way to check validity of HTML5 forms? 【发布时间】:2011-08-16 07:49:16 【问题描述】:

是否可以根据我为其设置的模式检查 html5 表单的输入元素是否有效?我知道伪类的东西..但我希望是这样的: document.getElementById('petitionName').valid 可以返回truefalse..

我真的希望我不需要创建 javascript 来重新验证这些东西。

【问题讨论】:

【参考方案1】:

有两种方法可以检查有效性。

    inputElement.checkValidity() 返回 truefalse inputElement.validity 返回有效性状态对象。 inputElement.validity.valid 返回true/false

除了使用 keyup 之外,您还可以使用 'input' 事件。所有实现了约束验证API的浏览器也都实现了input-event。

如果您使用上面的选项 1,Opera 会在此处出现错误,并且会显示其验证提示。所以你应该使用 2。

我创建了一个 html5 表单库,它为无法使用的浏览器实现了所有未知功能 + 修复了 HTML5 浏览器中的问题。所以一切都像规范中定义的那样工作,但它是建立在 jQuery 之上的。 (http://afarkas.github.com/webshim/demos/index.html)。

【讨论】:

嗯,我只是想要一个向后兼容的 checkValidity 插件。似乎你的库有太多内置函数,文档很难阅读。 我认为change事件更适合有效性检查。 有没有办法在 HTML 模式中使用标志(例如i)?【参考方案2】:

您可以使用pattern attribute。

它将在客户端验证它,因此无需再次验证它客户端。

jsFiddle.

但是,请确保在服务器端再做一次。

另外请注意,由于现在浏览器兼容性很差,JavaScript 是验证客户端的标准。

【讨论】:

谢谢,我尽量避免使用任何框架,并且我的模式属性已经设置好了。我希望我可以通过 DOM 访问输入元素并确定该元素是否为值。 是的,我知道 :) 我已经进行了相同的设置,我想避免使用任何 JQuery 表单验证器。我知道我可以设置对我有效的模式或类型。我已经这样做了。但是一旦输入元素有效,我想调用函数。我正在收听元素上的“onKeyUp”事件,但无法验证它们实际上是否有效。我有 CSS 来传达元素的有效性,但这还不够。 @Henry 你可以遍历input 元素,提取它们的pattern 属性并测试生成的正则表达式。 是的 - 这正是我想要避免的 :) 我确实想通了:function checkValid() document.getElementById('email').validity.valid; ;适用于 Chrome 和 ios 4.3 :) 感谢 Alex! @Henry 啊,是的,我在那里看到了那个属性,正要提到它:)【参考方案3】:

作为补充,您可以检查每个元素是否无效,例如,通过以下代码在第一个无效元素中设置焦点:

var Form = document.getElementById('FormID');
if (Form.checkValidity() == false) 
    var list = Form.querySelectorAll(':invalid');
    for (var item of list) 
        item.focus();
    

【讨论】:

这将把焦点放在最后一个元素上。我的意思是,第一个然后是第二个,然后是第 N 个,然后是最后一个。我想你是对的,它会将它设置在第一个元素上——如果第一个元素也是最后一个元素,甚至将注意力集中在第一个元素上。你可以使用querySelector 来避免这一切。

以上是关于一种检查 HTML5 表单有效性的方法?的主要内容,如果未能解决你的问题,请参考以下文章

仅针对 1 个元素的客户端表单有效性检查

检查日期是不是对选定的月份有效 Django 表单

HTML HTML5表单模板(全面,有效,语义)

Angular 2+多部分表单验证,如何检查单个输入的有效性

asp:RegularExpressionValidator 后提交表单检查表单是不是有效?

laravel 在插入之前检查记录是不是存在,这是一种有效的方法