热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HTML5的表单验证

几个月前桑迪普向我们介绍了HTML约束的API,展示我们如何使用新的HTML5输入类型和属性来验证我们的表格中以最小的JavaScript的浏览器。今天我将带领您通过使用约束的API验证一个简单的预订表格,并随时留意你如何能确保你的形式停留访问过。

几个月前桑迪普向我们介绍了HTML约束的API ,展示我们如何使用新的HTML5输入类型和属性来验证我们的表格中以最小的Javascript的浏览器。 今天我将带领您通过使用约束的API验证一个简单的预订表格,并随时留意你如何能确保你的形式停留访问过。

总括来说,或者如果你没有看过桑迪普的文章,使用HTML5的曙光,新的输入类型和属性的木筏加入标签,让浏览器自己来完成客户端验证我们:没有需要的Javascript。 要开始使用新的输入类型和属性,你并不真正需要做的任何东西比开始使用新的输入类型和属性等。

严格来说,你应该确保你使用了HTML5的DOCTYPE,否则你会碰到的HTML验证错误。 但关于他们的伟大的事情是,他们都降低正常。 所以,如果旧的浏览器不支持他们,事实上,他们是在HTML不会“破”什么,他们就会被渲染为一个 。

注:虽然客户端表单验证是伟大的增强的用户体验快速,即时反馈给用户未做往返于服务器,你仍然需要在服务器上验证提交的任何数据了。

让我们看一下我们如何可以只使用内置的验证浏览器的验证表单的例子。 就拿这个简单的预订表格:

  
Booking Details
Format: firstname lastname

http://jsfiddle.net/ianoxley/aZ9r8/1/

请注意,每个输入域都有一个关联

他们还帮助可访问性,如在标签中的文本将被读出到屏幕阅读器用户:因此,它可以是有用的,加入'需要'的标签文本,如我上面做的必填项。

我还使用了WAI ARIA aria-describedby属性,它可以帮助用户通知的格式中,他们应该进入他们的名字。

   Format: firstname lastname

这表现在它所描述的输入域获得焦点时,提供上下文相关的帮助:

 .help { display:none; font-size:90%; } input:focus + .help { display:inline-block; }

为了验证这种形式,我们将需要:

  1. 确保所需的字段已经完成
  2. 确保为'名'是怎么输入的名字一样
  3. 确保电子邮件地址看起来像一个电子邮件地址
  4. 检查,如果一个网站的网址已经提供,它看起来像一个网址
  5. 确保一个数字在'门票数量“中输入

必填字段

验证所需的字段是由于添加容易required的属性给每个 ,必须完成,即姓名,电子邮件,以及门票的数量标记。 例如,名称现在看起来像这样:

 
Format: firstname lastname

如果我们试图立即提交此表没有完成任何所需的字段,浏览器会通知我们:

必需的属性

你有没有注意到如何,我们不再有“必要”必填字段

一个字的警告,虽然:不是所有的浏览器都实现了required属性通俗易懂,所以它可能无法正确地拾起在某些浏览器/屏幕阅读器的组合。 因此,当前的最佳实践建议补充的咏叹调,需要=“true”属性所要求的属性:

 

验证数据

现在,我们的用户得到提示来完成必填字段,我们需要确保他们提交的数据是我们所需要的格式。

我们会想“名称”字段中提交格式为“名字姓',并且只能包含字母和一个空格( 注意在现实世界的场景,你可能需要考虑其他的语言环境-这个例子中一直保持简单的故意)。 我们可以通过添加一个pattern属性的“名称”字段中,设置它的值为正则表达式我们想要的数据进行比较,对实现这一目标:

 

当使用该模式属性, ^和$的正则表达式的开始和结束都是隐含的,不需要被包括在内。

你可以帮助用户通过包括title属性,告诉他们你所需要的格式:

 

在title属性中的文本被附加到内置的验证消息:

pattern属性

请注意,某些屏幕阅读器/浏览器组合,可能导致被读出,除了咏叹调 - describedby文本的title属性,所以注意这一点,例如我发现,使用NVDA与IE10引起的title属性和咏叹调 - describedby元素的文本被读出,但使用NVDA与Chrome和Firefox并没有表现出这种行为。 只有ARIA-describedby文本被读取。 稍后我们将重新审视这一点,并使用CSS3告诉你一个解决方案。

验证邮件,URL和数字

为了确保我们的用户在电子邮件,网站,门票字段数正确的数据,我们可以使用一些HTML5中添加新的输入类型:

 

通过指定适当的类型,我们的浏览器将验证数据对我们来说,并确保我们已经有了在电子邮件领域,在该领域的网站的URL,以及一些在现场门票的数量的电子邮件地址。

输入电子邮件

类型URL

还要注意的是type属性不再是必需的属性本身。 如果你不指定它的input变量将被隐式的type="text" 。

假设我们要限制的门票每个人能买多少? 我们可以通过使用这样做max和min的属性:

 

如果用户输入任何小于1或大于4,他们会被提示在允许的范围内输入一个数字。

max属性

使用CSS突出必填字段和无效数据

为配合由HTML5提供的新的输入类型和属性,CSS3给了我们一些新的伪类,我们可以用它来提供视觉线索的用户在哪个表单域是必需的,哪些是可选的,并且包含验证错误。

必填字段可以使用:required伪类:

 input:required { background:hsl(180, 50%, 90%); border:1px solid #999; }

可选字段可以使用:optional伪类:

 input:optional { background:hsl(300, 50%, 90%); border:1px dotted hsl(180, 50%, 90%); }

表单验证成功或失败可以通过使用以下方式表示给用户:valid , :invalid , :in-range和:out-of-range伪类:

 input:valid, input:in-range { background:hsl(120, 50%, 90%); border-color:hsl(120, 50%, 50%); } input:invalid, input:out-of-range { border-color:hsl(0, 50%, 50%); background:hsl(0, 50%, 90%); }

CSS3伪类

还记得前面我提到的某些屏幕阅读器/浏览器组合可导致大声除了正在读的title属性aria-describedby元素的文本? 那么,围绕这一方法是从输入元素去掉标题属性,并利用CSS3的:invalid伪类,以显示aria-describedby文字:

 input:focus + .help, input:invalid + .help { display:inline-block; }

现在,除了显示在输入字段接收焦点的说明文字中,我们还会显示帮助信息,当输入字段的值是无效的。

使所有这些更改之后我们的HTML现在看起来像这样:

  
Booking Details
Format: firstname lastname

http://jsfiddle.net/ianoxley/VY8KU/

禁用浏览器的验证

您可以禁用内置的浏览器验证通过添加一个novalidate属性到你标签:

http://jsfiddle.net/ianoxley/9C2JD/

跨浏览器?

好消息是, HTML表单验证是支持所有最新的桌面浏览器,和大多数移动浏览器。 坏消息是,它是只在Safari部分支持,并且不支持在所有iOS上的Safari浏览器,或者默认的Android浏览器。 如果你需要支持以前老版本的IE来IE10你不会找到任何这些支持表单验证两种。

所以,你可以做什么,如果你要支持不具备的表单验证还支持浏览器?

一种选择是什么也不做,只依靠你的服务器端验证。 这就需要对部件进行额外的工作,但会在UX对于那些使用不支持的浏览器是令人满意的?

另一种选择是继续使用的Javascript只为您的客户端验证,并且不添加任何上面讨论的新功能。

第三种方法是使用Javascript来检测浏览器是否支持表单验证,使用它,如果确实如此,并回落到基于Javascript的验证,如果它没有。 库如的Modernizr可以帮助HTML5特性检测,但你总是可以编写自己的代码,如果你不希望包含另一个Javascript库:

 // Without Moderizr var inputElem = document.createElement('input'); if (!('required' in inputElem)) { // Javascript form validation } ... // With Modernizr if (!Modernizr.input.required) { // Javascript form validation }

结论

在这篇文章中,我们已经通过应用HTML5的表单验证的预订表格,客户端,而无需使用任何Javascript走,并指出了一些可访问性问题警惕的。

然后,我们看着新的CSS3伪类可以如何用来给视觉线索,以用户为需要哪些字段和选项,其中包含有效的或无效的数据。

最后,我们介绍了如何禁用HTML表单验证,并检测表单验证是否可用或不可的情况下,我们必须支持的浏览器尚未支持此功能。

让我知道你怎么想的这一切中的注释。


推荐阅读
  • 定义Function类型:1functionsum(num1,num2){return num1+num2;}2varsumfunction(num1,num2){returnn ... [详细]
  • 深入浅出解析HTTP协议的核心功能与应用
    前言——协议是指预先设定的通信规则,确保双方能够按照既定标准进行有效沟通,从而实现准确的信息交换。例如,驯兽师通过拍手使动物坐下,这实际上是一种预设的协议。本文将详细探讨HTTP协议的核心功能及其广泛应用,解析其在现代网络通信中的重要作用。 ... [详细]
  • HTML5 Web存储技术是许多开发者青睐本地应用程序的重要原因之一,因为它能够实现在客户端本地存储数据。HTML5通过引入Web Storage API,使得Web应用程序能够在浏览器中高效地存储数据,从而提升了应用的性能和用户体验。相较于传统的Cookie机制,Web Storage不仅提供了更大的存储容量,还简化了数据管理和访问的方式。本文将从基础概念、关键技术到实际应用,全面解析HTML5 Web存储技术,帮助读者深入了解其工作原理和应用场景。 ... [详细]
  • 当前,众多初创企业对全栈工程师的需求日益增长,但市场中却存在大量所谓的“伪全栈工程师”,尤其是那些仅掌握了Node.js技能的前端开发人员。本文旨在深入探讨全栈工程师在现代技术生态中的真实角色与价值,澄清对这一角色的误解,并强调真正的全栈工程师应具备全面的技术栈和综合解决问题的能力。 ... [详细]
  • 本文深入探讨了ASP.NET中ViewState、Cookie和Session三种状态管理技术的区别与应用场景。ViewState主要用于保存页面控件的状态信息,确保在多次往返服务器过程中数据的一致性;Cookie则存储在客户端,适用于保存少量用户偏好设置等非敏感信息;而Session则在服务器端存储数据,适合处理需要跨页面保持的数据。文章详细分析了这三种技术的工作原理及其优缺点,并提供了实际应用中的最佳实践建议。 ... [详细]
  • 本文详细解析了如何利用Appium与Python在真实设备上执行测试示例的方法。首先,需要开启手机的USB调试功能;其次,通过数据线将手机连接至计算机并授权USB调试权限。最后,在命令行工具中验证设备连接状态,确保一切准备就绪,以便顺利进行测试。 ... [详细]
  • 在PC端,视口指的是浏览器的可视区域,其宽度和浏览器窗口的宽度保持一致。在CSS标准文档中,视口也被称为初始包含块,它是所有 ... [详细]
  • 开发工具WebDeveloper1.1.8https:addons.mozilla.orgen-USfirefoxaddon60以工具栏的形式对网页的(X)HTML、脚本、多媒体、 ... [详细]
  • 高效批量文件重命名软件
    开发了一款基于Python的高效批量文件重命名软件,并集成了wxWidgets图形用户界面,使用cxfreeze将其打包为独立的可执行文件(exe)。该工具适用于需要频繁处理大量文件的用户,能够显著提高文件管理效率。详细使用说明包含在软件压缩包内。开发环境为Python 2.7和wxWidgets 3.0,运行环境要求兼容Windows系统。 ... [详细]
  • 如何在IDEA中安装和配置反编译插件以提高代码审查效率
    在 IntelliJ IDEA 中提升代码审查效率的一种方法是安装和配置反编译插件。首先,进入 IDEA 的设置界面,然后导航到插件管理部分。接下来,搜索 "ideaJad" 插件并进行安装。安装完成后,重启 IDEA 以确保插件生效。这将帮助你在审查二进制文件时更加高效地查看源代码。 ... [详细]
  • 尽管许多人认为跑步是一项简单的运动,但实际上它涉及诸多专业知识。不正确的跑步方式不仅会降低锻炼效果,还可能引发伤害。例如,穿着不合脚或过于陈旧的跑鞋,会导致足部支撑不足,增加受伤风险。此外,跑步姿势不当、热身不足、过度训练等问题也同样值得关注。本文将详细介绍七大常见跑步误区,并提供专业的改进建议,帮助跑者避免这些问题,提高运动效率和安全性。 ... [详细]
  • 本文深入探讨了 iOS 开发中 `int`、`NSInteger`、`NSUInteger` 和 `NSNumber` 的应用与区别。首先,我们将详细介绍 `NSNumber` 类型,该类用于封装基本数据类型,如整数、浮点数等,使其能够在 Objective-C 的集合类中使用。通过分析这些类型的特性和应用场景,帮助开发者更好地理解和选择合适的数据类型,提高代码的健壮性和可维护性。苹果官方文档提供了更多详细信息,可供进一步参考。 ... [详细]
  • 在执行 Vim/VM 命令时遇到错误提示:检测到名为
    在使用 Docker 时,通过 Vim 编辑 Dockerfile 文件时遇到了错误提示:“检测到名为 .dockerfile.swp 的交换文件”。这一问题通常是因为上次编辑该文件时意外中断,导致系统生成了临时的交换文件。为了解决这个问题,可以手动删除该交换文件或使用 Vim 的恢复功能来恢复未保存的更改。 ... [详细]
  • 适用于 SSR/WASM 的 ZXing Blazor 扫码组件,高效集成与优化
    本项目基于 ZXing 封装了适用于 SSR 和 WASM 的 Blazor 扫码组件,能够高效地集成到 Blazor 应用中,并支持通过手机或桌面电脑的摄像头进行扫码操作。该组件库不仅简化了开发流程,还提供了高性能的扫码体验。项目地址:[链接] ... [详细]
  • 1.CSS3圆角border-radius属性一个最多可指定四个border-*-radius属性的复合属性,这个属性允许你为元素添加圆角边框!语法:border-radius:1 ... [详细]
author-avatar
记录生活传奇_909_874
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有