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事件处理程序 某个元素支持的每种事件都可以使用一个与响应的事件处理程序同 ...
随机推荐
- php核心技术与最佳实践(笔记一)
1.1面向对象的型与本 类是对象的抽象组织,对象是类的具体存在. 1.1.1对象的形 <?php class Person{ public $name; public $gender; publ ...
- Django之ORM操作
Django之ORM操作 前言 Django框架功能齐全自带数据库操作功能,本文主要介绍Django的ORM框架 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计 ...
- 输入ip和端口号python脚本py文件
1.利用.py文件进行打开URL,编辑以下文件代码保存文件为login.py: # _*_ coding: cp936 _*__all_ = ['ip','port','root_id']ip='10 ...
- postma概念与使用
Postman是google开发的一款功能强大的网页调试与发送网页HTTP请求,并能运行测试用例的的Chrome插件.Postman作为一个chrome的插件,你可以打开chrome,在chrome ...
- 从mysql主从复制到微信开源的phxsql
严格的来说,微信开源的phxsql不是数据库,而是一个数据库的插件: 传统的互联网数据库结构一般是这样的: 服务访问数据库是通过分片来的: 除了这种基于hash的分片,还有一种基于range的分片方式 ...
- [记录]MySQL 查询无法导出到文件
很多时候我们需要将数据导出到 xls文件, 然后交给数据分析师分析. 而这个查询数据+导出的动作,理应使用一个有只读权限的用户使用. 但查询某表时: select * from table ,此用户可 ...
- MySQL 连接出现 Authentication plugin 'caching_sha2_password' cannot be loaded
参考帖子: https://www.cnblogs.com/zhurong/p/9898675.html cmd 需要使用管理员权限打开
- SQL视图命名规则:一般以V_xxx_xxxxxx
- Django项目及应用的创建
一.url解释 1url是全球资源定位符,网上的每个文件都有唯一的url地址,组成:协议.服务器名称(或IP地址).路径和文件名. 2有时候,URL以斜杠“/”结尾,而没有给出文件名,在这种情况下,U ...
- LOJ-10095(缩点的特殊使用)
题目链接:传送门 思路: 缩点求最值,但是有一点行不通,如果被选中的点才能缩点,否则缩点没有意义: 所以就先缩选中的点,然后从小到大统计没有缩点的点,就是NO: 如果找最小值,就是一个环里的最小值,然 ...