自动切换焦点

使用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. abap 常用TCODE

    ABAP: 通过查询表TSTC或者TSTCT:SAP系统将所有的事务代码都存储在这个表中,包括字开发的Y*和Z* TCODE 事务代码功能描述 CG3Y 下载服务器上文件 CG3Z upload fi ...

  2. 部署代码review和CI

    公司原先搭了一个代码Review的服务器,由于历史原因,装的是一个32bit的Ubuntu系统,后来由于需要,需要安装gitlab,由于gitlab需要64位系统,所以临时凑合了个vagrant,本质 ...

  3. angular ViewChild ContentChild 系列的查询参数

    官方说明 官方文档 在调用 NgAfterViewInit 回调函数之前就会设置这些视图查询. 元数据属性: selector - 用于查询的指令类型或名字. read - 从查询到的元素中读取另一个 ...

  4. 如何监听Element组件<el-input>标签的回车事件

    一.现象 表单提交时需要处理输入框的回车事件,一般的原生input标签可以用@keyup.enter="onSubmit"(tips:onSubmit为定义的方法) 二.解决 1. ...

  5. js最实用string(字符串)类型的使用及截取与拼接详解

    var a = '世界上最远的距离不是天涯海角'; 一.通过字符获取位置或通过位置获取字符: //指定位置返回字符console.log(str.charAt(1));console.log(str[ ...

  6. 安卓学习第一节--环境搭建及Android Studio 安装

    1.安装JDK 2.安装AS 安装参考网址 https://www.cnblogs.com/xiadewang/p/7820377.html 下载网址: http://www.android-stud ...

  7. sqlserver CLR sqlserver使用C# dll

    转载地址:https://www.cnblogs.com/Brambling/p/8000911.html

  8. 第一个VS2015 Xaramin Android项目(终)

    其实还有一个问题没解决,也拖很久了.中途公司的项目太紧导致无法学习更新. 之前的问题是这样的:项目搭建成功了,App也成功发布到虚拟机.便尝试增加控件 Xaml 设计界面如下: 但是在虚拟机运行却这样 ...

  9. rsync @ERROR: auth failed on module backup 解决思路及附录rsync常见问题及解决办法

    昨晚小版本上线,使用rsync往服务器上传文件时,client报如下异常: @ERROR: auth failed on module backup rsync error: error starti ...

  10. node.js 使用 superagent 与 cheerio 完成简单爬虫

    目标 建立一个 lesson3 项目,在其中编写代码. 当在浏览器中访问 http://localhost:3000/ 时,输出 CNode(https://cnodejs.org/ ) 社区首页的所 ...