自动切换焦点

使用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没有正确加载的情况下也能完成基本的数据验证

  1. 必填字段

    <input type="text" name="username" required>

    标注有required的字段在表单提交时都不能空着

  2. 其他输入类型
    <!--输入的文本必须符合电子邮件格式-->
    <input type="email" name="email">
    <!--输入文本需要符合 url 格式-->
    <input type="url" name="homepage">

    若不设置 required 那么空文本也会通过验证

  3. 数值范围
    <input type="number" min="0" max="100" step="5" name="count">

    这样可以让用户只能输入 0~100的数值,并且必须是5的倍数,此外还支持以下类型

    1. "range"
    2. "datetime"
    3. "datetime-local"
    4. "date"
    5. "month"
    6. "week"
    7. "time"
    • 以上类型可能不会得到浏览器良好的支持  
  4. 输入模式
    <input type="text" pattern="\d+" name="count">
    <!--模式的开头和末尾不用加^和$-->

    该模式在JS中可以通过 pattern 属性访问

  5. 检测有效性
    1. 使用 checkValidity() 方法可以检测表单字段的有效性,判断依据就是前面介绍的约束
    2. 该方法返回true或false
    3. 所有表单字段都有该方法,如果要对整个表单进行验证那么只需要在表单上调用该方法即可
    4. 此外可以通过 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
    5. 之前的约束只会提示用户不符合要求,并不会阻止用户输入      
  6. 禁用验证
    <form method="post" action="sign.php" novalidate>
    </form>

    novalidate可以让提交按钮不验证该表单

Javascript高级编程学习笔记(78)—— 表单(6)HTML约束验证API的更多相关文章

  1. 《JavaScript高级程序设计》笔记:表单脚本(十四)

    表单的基础知识 在HTML中,表单是由<form>元素来表示的,而在JS中,表单对应的是HTMLFormElement类型.HTMLFormElement继承了HTMLElement,因而 ...

  2. Javascript高级编程学习笔记(75)—— 表单(3)表单字段

    表单字段 表单作为web应用中不可或缺的一部分,当然也是可以使用原生的 DOM 元素来访问的 除了标准的访问方式之外,每个表单都拥有一个 elements 属性,该属性保存着该表单所有 表单元素 的集 ...

  3. Javascript高级编程学习笔记(80)—— 表单(8)表单序列化

    表单序列化 随着 Ajax 的出现,表单序列化成为一种常见需求 以将表单信息序列化为查询字符串为例 我们可以利用表单的 type 属性,以及 name 和 value 实现对表单的序列化 序列化应满足 ...

  4. Javascript高级编程学习笔记(77)—— 表单(5)过滤输入

    在日常实践中,我们常常会需要用户按照某种规则输入数据 但是文本框在默认情况下缺少验证数据的手段,因此需要使用JS来完成此类过滤输入的操作 通过事件和DOM的结合手段就能够将普通的文本框转换为功能型控件 ...

  5. Javascript高级编程学习笔记(74)—— 表单(2)表单提交及重置

    表单提交 表单的很大一部分作用就是帮助用户完成和服务器的交互 所以表单提交是表单中比较重要的部分 虽然现如今的大部分应用场景都使用 AJAX 的异步请求来代替表单,但是仍有部分操作需要使用表单来完成, ...

  6. Javascript高级编程学习笔记(73)—— 表单(1)表单基础

    表单 JS最初的一个用途就是帮助服务器分担处理表单的责任 时至今日,虽然web应用以及JS都有了长足的发展,但是表单依然是现在web应用中比较重要的部分. 因为默认的表单控件很丑,所以有时候我们会使用 ...

  7. Javascript高级编程学习笔记(83)—— 富文本选区(3)

    富文本选区 在富文本编辑器中使用 iframe 的 getSelection() 方法可以获取选中的文本 该方法是 window 对象和 document 对象的属性,调用后会返回一个当前选选择文本的 ...

  8. Javascript高级编程学习笔记(64)—— 事件(8)键盘与文本事件

    键盘与文本事件 用户在使用键盘时会触发键盘事件 “DOM2级事件”最初规定了键盘事件,但是最后在定稿时又删除了相应内容 所以键盘事件被放入了DOM3级事件的规范中 总的来说有三个键盘事件: keydo ...

  9. Javascript高级编程学习笔记(58)—— 事件(2)事件处理程序

    事件处理程序 事件处理程序即响应某个事件的函数 事件处理程序以 “on” 开头 如“onclick”,“onload” HTML事件处理程序 某个元素支持的每种事件都可以使用一个与响应的事件处理程序同 ...

随机推荐

  1. webpack 模块方法

    1. webpack的import和export不需要引入babel 其他ES6语法需要引入babel 2. import引入export导出的模块 3. import()模块分离  低版本浏览器想使 ...

  2. IDEA开发环境中快捷键与系统 QQ等冲突的解决办法

    1.快捷键冲突1:IDEA中,Ctrl+Alt+向左/右/箭头快捷键 (回到光标的前一个位置,回到光标的后一个位置).该快捷键与系统中旋转屏幕的快捷键冲突了,需要解决.为了保留IDEA的中快捷键,我就 ...

  3. ubuntu 环境下 安装虚拟环境

    sudo pip3 install virtualenv 安装虚拟环境 sudo pip3 instal virtualenvwrapper #安装虚拟环境扩展包 编辑home目录下面的.bashrc ...

  4. Thread类与Runnable接口的深入理解

    Thread类与Runnable接口的深入理解1.Thread类实现了Runnable接口,实现run方法,其中target参数对应的就是一个Runnable接口的实现类 @Override publ ...

  5. centos 防火墙端口开放

    开放端口 永久的开放需要的端口 sudo firewall-cmd --zone=public --add-port=3000/tcp --permanent sudo firewall-cmd -- ...

  6. asp.net WebService如何去掉asmx后缀

    现在有一个发布好的WebService,地址是http://hovertree.com:2706/UploadExpenseToConstract.asmx能不能把最后面的asmx去掉呢?变成http ...

  7. asp.net上传图片到服务器

    ASP.NET的FileUpload控件可用于上传文件到服务器.HoverTreeTop新增了一个“阅图”功能,图片就是用FileUpload上传的.阅图功能查看:http://hovertree.c ...

  8. vue+elementUI表格列显示隐藏遇到bug

    在最近的项目中,有需求要做到根据字段显示列,原来以为简单的v-if可以解决. 在开发的过程中遇到问题, <el-table ref="multipleTable" :data ...

  9. 计蒜客 2019 蓝桥杯省赛 B 组模拟赛(三)数字拆分

    #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> us ...

  10. SAS 函数

    SAS 函数 SAS函数是编程语言的一个组件,可接受参数.执行计算或进行其他操作并返回值.返回值是字符型或数值型的结果,可用于赋值语句或 表达式中.SAS包含很多函数,也可以自定义函数.在BASE S ...