分享好友 前端技术首页 频道列表

HTML 交互式表单验证

html教程  2016-12-23 15:270

  在 HTML 中创建表单总是有点复杂。你首先得将 HTML 标记编写正确,然后需要确保每一个表单项在提交之前都有一个可用的值,最后还需要在有问题时用提醒来告知用户。

  还好 HTML5 引入了一些新的特性,让这件事情变得轻松了许多。特别是对表单控件进行了扩展来支持约束,从而无需使用 JavaScript, 就可以让浏览器在客户端对表单内容进行验证。

  WebKit 已经进行了部分支持。在表单控件上使用属性来描述约束,然后使用 JavaScript 中的 checkValidity() API 来查询一个表单控件和整个表单输入的有效性,这已经成为可能。使用 ValidityState API 来了解违反了哪个约束,也是可以实现的。

  不过, WebKit 以前并不支持 HTML 的交互式表单验证, 而这个会发生在表单提交时 (除非在 <form> 元素上设置了 novalidate 属性) 或者是使用 reportValidity() API 的时候。此外,我们很高兴地宣布, Webkit 现在已经对此进行了支持,并且在 Safari 技术预览版 19 也启用了这项功能。有了交互式表单验证, WebKit 现在将会对表单中所有的表单控件进行有效性检测。如果有哪怕一个表单控件违反了约束,WebKit 就会将输入焦点放到第一个上面,界面页面滚动显示出这个控件,然后在其旁边显示一个气泡消息来对问题进行解释。

 验证的约束

  输入类型

  有一些输入类型本身就拥有一些内在的约束。将 type 设置为 “email”, “number” 或者 “URL” 的话,就会自动检查输入的值是否是有效的电子邮件地址、数字或者 URL, 例如:

<input type="email">

  验证属性

  下面的属性可以被用来在表单控件中描述约束:

  • required: 告诉用户必须输入一个值。

  • pattern=“[a-z]”: 告诉用户必须输入一个可以匹配给定 JavaScript 正则表达式的值。

  • minlength=x: 告诉用户必须输入一个至少有 x 个字符的值。

  • maxlength=y: 告诉用户必须输入一个至多有 x 个字符的值。

  • min=x: 告诉用户必须输入一个大于或者等于 x 的值。。

  • max=y: 告诉用户必须输入一个小于或者等于 y 的值。

  • step=x: 告诉用户必须输入一个在 min 的基础上加上 x 的倍数的值。

 约束验证

  约束验证可以用以下集中方式触发:

  • 可以在一个表单元素或者特定的表单控件上调用 checkValidity() 。这个方法会在有约束被违反的时候返回 false。同时它也会在违反约束的元素上触发一个叫做“invalid”的事件。可以使用通过表单控件上的“validity”属性所暴露的 ValidityState 对象来检查违反了哪个约束。

  • 可以在一个表单约束或者特定的表单控件上调用 reportValidity()。这样做会触发针对约束的交互式验证。此外 checkValidity(), reportValidity() 也会将输入焦点放到第一个被检查出违背了约束的元素上,并且在其旁边显示一个气泡消息来对问题进行描述。

  • 交互式表单验证也会在提交表单的时候发生,除非在<form>元素上设置了“novalidate”属性。

 自定义约束

  使用 JavaScript 来做验证然后利用 setCustomValidity() API 的话,可以实现更加复杂的验证约束或者向校验出违反约束的输入项提供更加有用的错误消息。

  JavaScript 可以通过在一个表单控件上侦听给定的事件来触发(例如: on change, oninput, …) 。然后被执行的 JavaScript 代码可以对表单控件的数据进行验证,然后使用 setCustomValidity() 来对控件的错误消息进行更新:

<label for="feeling">Feeling:</label>
<input id="feeling" type="text" oninput="validateFeeling(this)">
<script>
 function validateFeeling(input) {
   if (input.value == "good" || input.value == "fine" || input.value == "tired") {
     input.setCustomValidity(" + input.value + " is not a feeling);
   } else {
     // The data is valid, reset the error message.
     input.setCustomValidity();
   }
 }
</script>

 验证消息气泡提示

  在进行交互式表单验证的时候, 一个针对问题进行说明的气泡提示会显示在第一个拥有被验证违反约束的数据的表单控件旁边, 像这样:

  针对特定的约束默认设置了一些本地化的验证消息。如果你希望对验证消息进行自定义, 可以考虑使用 setCustomValidity() API。注意,WebKit 对于 JavaScript 的国际化 API 也是支持的,这个能够帮助我们对自定义的验证消息进行本地化。

 总结

  HTML 交互式表单验证现在已经在 Webkit 中得到了支持,并且在 Safari 技术预览版 19 中也是启用了的。请尝试一下我们的在线演示来体验这项功能。也欢迎您报告BUG

  原文地址:https://webkit.org/blog/7099/html-interactive-form-validation/

查看更多关于【html教程】的文章

展开全文
相关推荐
反对 0
举报 0
评论 0
图文资讯
热门推荐
优选好物
更多热点专题
更多推荐文章
JavaScript DOM方法、innerHTML实现增删改
!DOCTYPE htmlhtmlheadmeta charset="UTF-8"title/titlestyle*{list-style: none;}#main{border: 1px solid black;width: 270px;height: 300px;float: left;text-align: center;}button{display: block;text-align: center;margin-left:20px ;margin-top: 10p

0评论2023-03-08505

【javascript基础】insertAdjacentHTML和insertAdjacentText方法
IE的DHTML对象提供了四个可读写的属性来动态操作页面元素的内容:innerText, outerText, innerHTML, outerHTML.  需注意两点:  1. 其中innerText,outerText属性的值是作为普通文本呈现的,即使它含有HTML标签也如实反应出来;而innerHTML, outerHTML呈现的

0评论2023-03-08922

纯CSS隔行换色 html隔行换色
head meta http-equiv="Content-Type" content="text/html; charset=utf-8" / titlecss3隔行变换色---www.jbxue.com/title style type="text/css" #list1 li:nth-of-type(odd){ background:#00ccff;}奇数行 #list1 li:nth-of-type(even){ background:#

0评论2023-03-08638

css文字溢出隐藏,及强制断句 html文字溢出隐藏
只显示一行文字,便溢出隐藏  text-overflow: ellipsis;  white-place: nowrap;  overflow: hidden;显示 n 行文字后便溢出隐藏   display: -webkit-box;  -webkit-line-clamp: n;  -webkit-box-orient: vertical;  overflow: hidden;强制断句

0评论2023-03-08958

人民币符号¥在css和html正确显示
商城项目需要涉及到人民币的页面现实问题。但是¥(指的是通常输入法中文全角模式下按shift+4的那个)在宋体(v3.03, v5.0)的情况下是显示一杠。常见的其他字体微软雅黑(Microsoft YaHei),华文细黑(STXihei),細明體(MingLiu)能显示两杠。CSS方式:fo

0评论2023-03-08410

CSS及HTML、js中的资源路径问题 html引入js文件路径
路径 分为相对路径和绝对路径一、相对路径。相对于文件本身的路径。用 ./ 表示同一文件夹下的兄弟文件。用../ 表示所处文件夹的父文件夹中的文件。二、绝对路径。本机绝对路径是 例如  E:\phpStudy\WWW\NEWPC\images.网络的绝对路径是指:例如一张图片的绝

0评论2023-03-08484

合并css/js请求 怎么将css代码合并到html中
在项目开发的过程中,为了追求速度,减少页面建立的 http 连接数,会对多个css/js请求进行合并如:script src="http://local.com/js/a.js"script src="http://local.com/js/b.js"script src="http://local.com/js/c.js"这样的请求可以合并为:script src="htt

0评论2023-03-08911

css文件和js文件后面带一个问号 html中css文件和js文件放置的位置及原因
经常看一些网站页面源代码中的css文件和js文件后面带一个问号,后面跟着一连串数字或字符,这是干什么用的? 这个方法我也用过,而且很好用?,它的作用有两个:1、作为版本号,让自己方便记忆、查找;2、作为修改标签,让浏览器重新下载新文件。 其实css文件

0评论2023-03-08887

HTML中将背景颜色渐变 html设置背景颜色渐变
通过使用 css3 渐变可以让背景两个或多个指定的颜色之间显示平稳的过渡,由于用到css3所以需要考虑下浏览器兼容问题,例如:从左到右的线性渐变,且带有透明度的样式:#grad {background: -webkit-linear-gradient(left,rgba(255,0,0,0),rgba(255,0,0,1)); /*

0评论2023-03-08625

html5 Canvas 如何自适应屏幕大小
但是这样创建出的画布不能随着浏览器窗口大小的改变而动态的改变画布的大小。而这一点往往又非常重要, 因为我们会经常改变浏览器窗口大小,不会一直保持某个固定的大小。 html代码 canvas width="300" height="300" id="myCanvas"/canvas设置样式 * {

0评论2023-03-08811

HTML的video标签,不能下载视频代码
!-- 在线视频不能下载代码 --!DOCTYPE html html headscript src="../Demo/demo/book/JQuery/jQuery v2.2.0.js"/script/headbody div style="text-align:center;"video src="../images/PreviewVideo.mp4" width="820"controls="controls&

0评论2023-03-08596

HTML特殊字符、列表、表格总结 html特殊符号对照表
        HTML实体字符  在HTML中一些特殊的字符需要用特殊的方式才能显示出来,比如小于号、版权等,  在课堂上老师教了我们一个有点意思的:空格,在教材上字符实体是“nbsp”通过老师  的演示我们发现不同的浏览器他所显示的效果不同,有的比

0评论2023-03-08521

【JavaScript】使用document.write输出覆盖HTML问题
您只能在 HTML 输出中使用 document.write。如果您在文档加载后使用该方法,会覆盖整个文档。分析HTML输出流是指当前数据形式是HTML格式的数据,这部分数据正在被导出、传输或显示,所以称为“流”。通俗的来说就是HTML文档的加载过程,如果遇到document.writ

0评论2023-03-08815

ASP.Net MVC 控制@Html.DisplayFor日期显示格式
在做一個舊表的查詢頁時,遇到一個問題:字段在db里存儲的是DATETIME,但保存的值只有日期,沒有時間數據,比如2018/2/26 0:00:00,顯示出來比較難看,當然也可以做一個ViewModel,在字段上添加Attribute定義來更改名稱和顯示名稱,如下:[Display(Name = "建

0评论2023-03-08716

html 基础代码
title淄博汉企/title/headbody bgcolor="#00CC66" topmargin="200" leftmargin="200" bottommargin="200"a name="top"/a今天br /天气nbsp;nbsp;nbsp;nbsp;nbsp;不错br /font color="#CC0000"格式控制标签br /b 文字加粗方式1\bbr /str

0评论2023-03-08466

更多推荐