Javascript高级编程学习笔记(78)—— 表单(6)HTML约束验证API
自动切换焦点
使用JS可以极大地提升表单的易用性
其中最常用的一种就是当用户填写完当前字段后焦点自动切换到下一个字段
以下方的HTML代码为例:
<input type="text" name="tel1" id="txtTel1" maxlength="3">
<input type="text" name="tel2" id="txtTel2" maxlength="4">
<input type="text" name="tel3" id="txtTel3" maxlength="4">
上方的代码给出了输入电话号码的例子
针对这样的HTML结构,我们可以使用下面的代码来完成自动切换焦的功能
(function(){
function tabForward(event){
var target = event.target;
if(target.value.length == target.maxLength){
var form = target.form;
for(let i = 0,len=form.elements.length;i< len;i++){
if(form.elements[i]==target){
if(form.elements[i+1]){
form.elementsp[i+1].focus();// 将焦点切换到下一个文本框
}
return;
}
}
}
}
let textbox1 = document.getElementById("txtTel1");
let textbox2 = document.getElementById("txtTel2");
let textbox3 = document.getElementById("txtTel3");
textbox1.addEventListener("keyup",tabForward,false);
textbox2.addEventListener("keyup",tabForward,false);
textbox3.addEventListener("keyup",tabForward,false);
})();
PS. 上述代码只适用于之前的HTML结构,并且没有考虑隐藏字段
HTML5约束验证API
为了在将表单提交到服务器之前验证数据,HTML5新增了一些功能
这些功能可以让我们在JS没有正确加载的情况下也能完成基本的数据验证
- 必填字段
<input type="text" name="username" required>
标注有required的字段在表单提交时都不能空着
- 其他输入类型
<!--输入的文本必须符合电子邮件格式-->
<input type="email" name="email">
<!--输入文本需要符合 url 格式-->
<input type="url" name="homepage">若不设置 required 那么空文本也会通过验证
- 数值范围
<input type="number" min="0" max="100" step="5" name="count">
这样可以让用户只能输入 0~100的数值,并且必须是5的倍数,此外还支持以下类型
- "range"
- "datetime"
- "datetime-local"
- "date"
- "month"
- "week"
- "time"
- 以上类型可能不会得到浏览器良好的支持
- 输入模式
<input type="text" pattern="\d+" name="count">
<!--模式的开头和末尾不用加^和$-->该模式在JS中可以通过 pattern 属性访问
- 检测有效性
- 使用 checkValidity() 方法可以检测表单字段的有效性,判断依据就是前面介绍的约束
- 该方法返回true或false
- 所有表单字段都有该方法,如果要对整个表单进行验证那么只需要在表单上调用该方法即可
- 此外可以通过 validity 属性获取详细的验证信息,该属性包含一个对象,该对象有以下属性
- customError:是否设置 setCustomValidity()
- patternMismatch:是否与指定的 pattern 匹配
- rangeOverflow:比max大则返回 true
- rangeUnderflow:比min小则返回 true
- stepMisMatch:step不合理返回 true
- tooLang:超出maxlength,部分浏览器会对长度进行约束,所以该值可能一直都是false
- typeMismatch:输入的格式与type值不同
- valid:其他属性都为false,该值为true(checkValidity()方法返回的就是该值)
- valueMissing:标注required的字段中没有值则为true
- 之前的约束只会提示用户不符合要求,并不会阻止用户输入
- 禁用验证
<form method="post" action="sign.php" novalidate>
</form>novalidate可以让提交按钮不验证该表单
Javascript高级编程学习笔记(78)—— 表单(6)HTML约束验证API的更多相关文章
- 《JavaScript高级程序设计》笔记:表单脚本(十四)
表单的基础知识 在HTML中,表单是由<form>元素来表示的,而在JS中,表单对应的是HTMLFormElement类型.HTMLFormElement继承了HTMLElement,因而 ...
- Javascript高级编程学习笔记(75)—— 表单(3)表单字段
表单字段 表单作为web应用中不可或缺的一部分,当然也是可以使用原生的 DOM 元素来访问的 除了标准的访问方式之外,每个表单都拥有一个 elements 属性,该属性保存着该表单所有 表单元素 的集 ...
- Javascript高级编程学习笔记(80)—— 表单(8)表单序列化
表单序列化 随着 Ajax 的出现,表单序列化成为一种常见需求 以将表单信息序列化为查询字符串为例 我们可以利用表单的 type 属性,以及 name 和 value 实现对表单的序列化 序列化应满足 ...
- Javascript高级编程学习笔记(77)—— 表单(5)过滤输入
在日常实践中,我们常常会需要用户按照某种规则输入数据 但是文本框在默认情况下缺少验证数据的手段,因此需要使用JS来完成此类过滤输入的操作 通过事件和DOM的结合手段就能够将普通的文本框转换为功能型控件 ...
- Javascript高级编程学习笔记(74)—— 表单(2)表单提交及重置
表单提交 表单的很大一部分作用就是帮助用户完成和服务器的交互 所以表单提交是表单中比较重要的部分 虽然现如今的大部分应用场景都使用 AJAX 的异步请求来代替表单,但是仍有部分操作需要使用表单来完成, ...
- Javascript高级编程学习笔记(73)—— 表单(1)表单基础
表单 JS最初的一个用途就是帮助服务器分担处理表单的责任 时至今日,虽然web应用以及JS都有了长足的发展,但是表单依然是现在web应用中比较重要的部分. 因为默认的表单控件很丑,所以有时候我们会使用 ...
- Javascript高级编程学习笔记(83)—— 富文本选区(3)
富文本选区 在富文本编辑器中使用 iframe 的 getSelection() 方法可以获取选中的文本 该方法是 window 对象和 document 对象的属性,调用后会返回一个当前选选择文本的 ...
- Javascript高级编程学习笔记(64)—— 事件(8)键盘与文本事件
键盘与文本事件 用户在使用键盘时会触发键盘事件 “DOM2级事件”最初规定了键盘事件,但是最后在定稿时又删除了相应内容 所以键盘事件被放入了DOM3级事件的规范中 总的来说有三个键盘事件: keydo ...
- Javascript高级编程学习笔记(58)—— 事件(2)事件处理程序
事件处理程序 事件处理程序即响应某个事件的函数 事件处理程序以 “on” 开头 如“onclick”,“onload” HTML事件处理程序 某个元素支持的每种事件都可以使用一个与响应的事件处理程序同 ...
随机推荐
- sort排序在苹果与安卓端不一致问题
一.问题 在使用sort排序时,若遇到相同数据或非数值数据时,会出现苹果手机与安卓手机排序不一致问题 var arr = [{ "id": "52", &quo ...
- 十、JAVA面试简答
2.ASCII编码表的常识 3.&和&&,|和||的区别 下面我们就分成三组对问题进行分析:分别是&和&&,|和||及~和!. 1.&是按位与操 ...
- 4.7做作业时发现,内联元素设置宽高背景以后正常不显示,但是设置了position:absolute;以后就可以显示了。起到了和display:block;一样的效果。然后查了一下知道了。
如果内联元素定位属性设置为:absolate,元素脱离文档,即使a元素中没有内容,设置的背景依然会显示!
- Matting任务里的Gradient与Connectivity指标
Matting任务里的Gradient与Connectivity指标 主要背景 Matting任务就是把α(不透明度, 也就是像素属于前景的概率).F(前景色)和B(背景色)三个变量给解出来. C为图 ...
- 分布式服务治理框架dubbo
Dubbo最主要功能有两个 1 RPC调用 2 SOA服务治理方案 Dubbo的架构 Dubbo常见的注册中心有2中,zookeeper以及redis 这篇文章讲解的是采用的zookeeper,要求读 ...
- JSP·随笔
1.简介 > HTML - HTML擅长显示一个静态的网页,但是不能调用Java程序. > Servlet - Servlet擅长调用Java程序和后台进 ...
- T-1-java语言基础
一.Linux的由来和发展 Linux是开源的操作系统 Linux是服务器端的操作系统 java主要用于服务器端 二.Linux目录结构(与Windows不同) 文件系统不同:Windows是盘符 ...
- mybatis中String参数的传递
mybatis中String参数的传递 Keywords selectKeywords(@Param("key") String key); 可以在mapper方法的参数钱添加 @ ...
- java 幂等性(转)
(转自)http://www.cnblogs.com/weidagang2046/archive/2011/06/04/idempotence.html 理解HTTP幂等性 基于HTTP协议的Web ...
- Chrome扩展插件流程
一.浏览器插件基础步骤: 1.文件最基础的配置 : 一个manifest文件.一个或多个html文件.可选的一个或多个javascript文件.可选的任何需要的其他文件,例如图片:在开发应用(扩展)时 ...