《HTML5实战》——2.4 利用约束验证API来检查表单输入数据

简介:

本节书摘来自异步社区《HTML5实战》一书中的第2章,第2.4节,作者: 【美】Rob Crowther , Joe Lennon , Ash Blue , Grey Wanish 更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.4 利用约束验证API来检查表单输入数据

本章开始时曾介绍过一些HTML5的新验证特性——required、pattern、min和max这些属性。通过使用这些属性,无需借助任何额外的JavaScript脚本,浏览器自身就可以验证表单输入字段的数据。然而,这些属性仅仅才是HTML5验证功能中的小角色而已,约束验证API才是主角。

本节主要内容

  • 如何使用validation属性和方法来设置自定义的验证测试。
  • 如何使用invalid事件来侦测已提交表单中的无效字段。
  • 如何使用CSS3中新增的伪类选择器为无效字段应用样式,而无需在输入元素中假如过多的类名。

    0372cdb236160f65b263f42b87900cce1d9698d8

    约束验证API所提供的方法与属性可以对指定元素的有效性进行侦测与修改。借助它可以实现其他的验证功能,并且还可以使用自定义的错误消息提示。可以侦测到字段是否存在错误,如果有错误,还可以侦测出错误类型以及要显示的错误消息提示。它还可以让我们自己来设置自定义验证消息,能够被浏览器原生显示出来。

    本节将继续开发我们的订单应用,接下来的内容分为两步。

    • 第1步:为输入元素添加自定义验证与自定义错误消息提示。
    • 第2步:侦测表单验证失败事件。
      尽管本书已经为该例提供了一个完整的CSS文件,你完全可以不必自己动手编码,但在本节最后,我们将介绍如何利用CSS3进行无效元素的样式,以便你将来能把这一点也用到自己开发的应用中。首先讨论一下约束验证API的属性与方法。

    2.4.1 利用setCustomValidity方法和ValidationMessage属性创建自定义验证测试和错误消息
    当浏览器或HTML5不支持验证功能时,应用就只好采用自定义验证测试。这种情况下,需要借助JavaScript来验证输入数据的有效性,并在验证失败时提供自定义错误消息提示。约束验证API所提供的setCustomValidity方法和validationMessage属性简化了自定义错误消息提示的实现。两种构建都允许应用将错误消息提示赋予< input >元素的validationMessage属性。具体采用哪种构建,则要跟据浏览器对setCustomValidity的支持来判断。

    第1步:为输入字段加入自定义验证与错误消息提示
    订单应用将利用setCustomValidity方法来执行自定义验证。

    • 用户全名长度必须至少4个字符。
    • 密码长度必须至少8个字符。
    • “设置密码”与“密码确认”内填入的数据必须一致。
    • 信用卡号的长度必须至少4个字符。
      接下来就为app.js加入这种自定义验证,将代码清单2-11所示的代码加到init函数的末尾,紧跟在对qtyListeners的调用的后面。


    <a href=https://yqfile.alicdn.com/1e58d438b8b458fb454002cfd20f3cad5af6eceb.png" >

    试试看

    如果你用兼容浏览器来打开订单页面,试着打破此前所说的自定义验证规则,那么自定义错误消息提示就会出现,如图2-10所示。

    接下来将使用invalid事件,当用户提交的页面中带有一个或更多的字段被标为无效时,该事件就会被触发。


    cd2f5a67e2b2d95bfed6de45aa68be8a0a0b2dec

    2.4.2 利用invalid事件来侦测失败的表单验证
    当用户试图提交一个使用了HTML5验证特性的表单时,只有当整个表单完全通过验证测试,submit事件才会触发。如果你需要侦测表单验证何时出问题,可以侦听新的invalid事件,该事件触发的条件只有以下两种。

    • 用户试图提交表单,但验证失败。
    • checkValidity方法已经被应用调用过,且返回false。
      第2步:侦测订单验证失败

    为表单的invalid事件添加一个侦听器,将代码清单2-12所示的代码加入上一节所完成的代码后面。


    69f8706d27c130d803f89412030e9520ba707e9a

    如果想为已提交表单中的错误表单字段添加一种样式,那么invalid事件就很有用了。下面就来学习它。
    **
    2.4.3 利用CSS3伪类来设置无效元素的样式**
    要想设置无效元素的样式,可以在迭代验证各个字段。一旦发现无效字段,就在该字段上应用CSS类。但这种方法太笨了,稍微用一下CSS3的一些技巧,你完全可以更简洁地实现它。

    CSS3引入了一些新的伪类,可以根据验证结果来设置表单字段的样式。只有当伪类为真时,这些样式才会被应用。下面这些伪类作用显而易见:

    • :valid
    • :invalid
    • :in-range
    • :out-of-range
    • :required
    • :optional
      你可能会猜到,伪类简化了无效字段的样式设置工作。例如,对于由约束验证API宣布为无效的元素,下面的代码会用淡红色的背景和栗色边界框来设置它们的样式。


    <a href=https://yqfile.alicdn.com/450934cb01a997945eae19dff785c9dea0a89b43.png" >

    但这种声明也存在一个问题:订单页面刚加载时,各字段是空的。所以对于那些使用required或pattern验证属性的字段来说,一开始就是无效的,所以那些添加了验证属性的字段,就会都显示出亮红色背景和栗色边框,这太难看了。

    幸好,这个问题解决起来并不难,当invalid事件已经触发,给父级表单添加一个类,并且为应用到表单中的输入元素及选择器元素的CSS规则中添加伪类选择器:invalid。

    注意 不要改变在本章刚开始时加入应用目录的CSS文件。本节将逐步介绍理论上你可能会采取的改变,而不是让你真的去修改它们。

    上一节中,你为父级表单添加了一个类,现在,在CSS中添加一个伪类选择器:invalid。


    <a href=https://yqfile.alicdn.com/6a15ea7314b5fe70745e290504c3446343f272c0.png" >

    另外,订单还用:required伪类选择器来为带有required属性的字段设置一种淡黄色背景的样式:


    <a href=https://yqfile.alicdn.com/e4b9067c836f84254511e2316e7656b36aad559e.png" >

    带有required属性的字段与无效字段的样式如图2-11所示。


    <a href=https://yqfile.alicdn.com/01fdbdb9da47daab60764d8270201eaddbfc5d82.png" >

    截止目前,对于大多数现今的浏览器而言(除了Safari之外),表单的功能基本上都可以用了。下一节将介绍如何使用Modernizr库来实现绝对可靠的特性侦测,以及如何使用polyfill来填补特性上的空白。

相关文章
Python 请求微店商品详情数据 API 接口
微店开放平台允许开发者通过API获取商品详情数据。使用Python请求微店商品详情API的主要步骤包括:1. 注册并申请API权限,获得app_key和app_secret;2. 确定API接口地址与请求参数,如商品ID;3. 生成签名确保请求安全合法;4. 使用requests库发送HTTP请求获取数据;5. 处理返回的JSON格式响应数据。开发时需严格遵循微店API文档要求。
微店商品详情API接口实战指南:从零实现商品数据自动化获取
本文介绍了微店商品详情API接口的应用,涵盖申请与鉴权、签名加密、数据解析等内容。通过Python实战演示了5步获取商品数据的流程,并提供了多平台同步、价格监控等典型应用场景。开发者可利用此接口实现自动化操作,提升电商运营效率,降低人工成本。文中还总结了频率限制、数据缓存等避坑指南,助力开发者高效使用API。
实战指南:通过1688开放平台API获取商品详情数据(附Python代码及避坑指南)
1688作为国内最大的B2B供应链平台,其API为企业提供合法合规的JSON数据源,直接获取批发价、SKU库存等核心数据。相比爬虫方案,官方API避免了反爬严格、数据缺失和法律风险等问题。企业接入1688商品API需完成资质认证、创建应用、签名机制解析及调用接口四步。应用场景包括智能采购系统、供应商评估模型和跨境选品分析。提供高频问题解决方案及安全合规实践,确保数据安全与合法使用。立即访问1688开放平台,解锁B2B数据宝藏!
处理从API返回的JSON数据时返回Unicode编码字符串怎么处理
在处理API返回的JSON数据时,遇到类似`\u7f51\u7edc\u8fde\u63a5\u9519\u8bef`的Unicode编码字符串,可使用JavaScript内置方法转换为可读文字。主要方法包括:1. 使用`JSON.parse`自动解析;2. 使用`decodeURIComponent`和`escape`组合解码;3. 在API调用中直接处理响应数据。这些方法能有效处理多语言内容,确保正确显示非ASCII字符。
微信小程序网络请求与API调用:实现数据交互
本文深入探讨了微信小程序的网络请求与API调用,涵盖`wx.request`的基本用法、常见场景(如获取数据、提交表单、上传和下载文件)及注意事项(如域名配置、HTTPS协议、超时设置和并发限制)。通过一个简单案例,演示了如何实现小程序与服务器的数据交互。掌握这些技能将帮助你构建功能更丰富的应用。
淘宝商品评论数据API接口详解及JSON示例返回
淘宝商品评论数据API接口是淘宝开放平台提供的一项服务,旨在帮助开发者通过编程方式获取淘宝商品的评论数据。这些数据包括评论内容、评论时间、评论者信息、评分等,对于电商分析、用户行为研究、竞品分析等领域都具有极高的价值。
速卖通商品详情接口(速卖通API系列)
速卖通(AliExpress)是阿里巴巴旗下的跨境电商平台,提供丰富的商品数据。通过速卖通开放平台(AliExpress Open API),开发者可获取商品详情、订单管理等数据。主要功能包括商品搜索、商品详情、订单管理和数据报告。商品详情接口aliexpress.affiliate.productdetail.get用于获取商品标题、价格、图片等详细信息。开发者需注册账号并创建应用以获取App Key和App Secret,使用PHP等语言调用API。该接口支持多种请求参数和返回字段,方便集成到各类电商应用中。
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
52 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡

热门文章

最新文章