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

IT技术 javascript forms html dom
2021-03-07 19:17:30

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

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

3个回答

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

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

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

如果您使用上面的选项 1,Opera 在这里有一个错误,将显示其验证提示。所以你应该使用2。

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

我认为该change事件更适合用于有效性检查。
2021-05-03 19:17:30
有没有办法i在 HTML 模式中使用标志(例如)?
2021-05-07 19:17:30
嗯,我只是想要一个向后兼容的 checkValidity 插件。似乎你的库有太多的内置函数,而且文档很难阅读。
2021-05-08 19:17:30

您可以使用pattern属性

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

例子

js小提琴

但是,请确保在服务器端再次执行此操作。

另请注意,由于目前浏览器的兼容性非常差,因此 JavaScript 是验证客户端的标准。

@Henry 啊,是的,我在那里看到了那处房产,正要提到它:)
2021-04-21 19:17:30
@Henry 您可以遍历input元素,提取它们的pattern属性并测试生成的正则表达式。
2021-04-23 19:17:30
是的 - 这正是我想要避免的 :) 我确实弄清楚了: function checkValid(){ document.getElementById('email').validity.valid; }; 适用于 Chrome 和 iOS 4.3 :) 谢谢亚历克斯!
2021-04-24 19:17:30
是的,我知道 :) 我已经进行了相同的设置,我想避免使用任何 JQuery 表单验证器。我知道我可以设置为我验证的模式或类型。我已经这样做了。但是我想在输入元素有效后调用函数。我正在侦听元素上的“onKeyUp”事件,但无法验证它们实际上是否有效。我有传达元素有效性的 CSS,但这还不够。
2021-05-02 19:17:30
谢谢,我试图避免使用任何框架,并且我的模式属性已经设置。我希望我可以通过 DOM 访问输入元素并确定该元素是否为值。
2021-05-19 19:17:30

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

var Form = document.getElementById('FormID');
if (Form.checkValidity() == false) {
    var list = Form.querySelectorAll(':invalid');
    for (var item of list) {
        item.focus();
    }
}
这将把焦点放在最后一个元素上。我的意思是,第一个然后是第二个,然后是第 N 个,然后是最后一个。我想你是对的,它会将它设置在第一个元素上——如果第一个元素也是最后一个元素,甚至将注意力集中在第一个元素上。你可以querySelector用来避免这一切。
2021-05-02 19:17:30