自动切换焦点

使用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. js如何获取点击<li>标签里的内容值

    路:为li对象添加单击事件→事件触发后利用innerHTML获取li的文本.实例演示如下: 1.HTML结构 <ul id="test"> <li>Glen ...

  2. 2. 2A03简介

    2A03简介 1.CPU 1.1 内部寄存器 1.累加寄存器A(Accumulator):8位寄存器,用于同算术逻辑单元(ALU)共同完成各种算术逻辑运算,它既为ALU提供原始操作数又担任存放ALU运 ...

  3. The web application registered the JDBC driver * but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.

    最近使用了最新版的tomcat9,使用jdbc链接mysql数据库.关闭tomcat过程中出现警告 13-Sep-2017 22:22:54.369 WARNING [main] org.apache ...

  4. pip 的简单使用

    pip3 install scrapy #安装包 pip3 uninstall scrapy #删除安装包 pip3 search 'packages_name'#搜索包 pip3 list  #列出 ...

  5. Angular实现动态添加删除表单输入框功能

    <div class="form-group form-group-sm" *ngFor="let i of login"> <label c ...

  6. Codeforces 1086D Rock-Paper-Scissors Champion

    Description \(N\) 个人排成一排, 每个人都事先决定出剪刀.石头.布. 每次可以任意选两个相邻的人进行决斗. 规则和游戏一样. 但是如果平局, 则掷硬币来决定胜负. 输的人下场. 现要 ...

  7. [精华][推荐]CAS SSO 单点登录框架学习 环境搭建

    1.了解单点登录  SSO 主要特点是: SSO 应用之间使用 Web 协议(如 HTTPS) ,并且只有一个登录入口. SSO 的体系中有下面三种角色: 1) User(多个) 2) Web 应用( ...

  8. PM学习梳理--需求管理

  9. IMPLEMENTATION - Entity Framework Anti Pattern - High Performance EF

    Good about ORM Developer is free from building T-Sql on the database tier which is not their major a ...

  10. SQL: Cannot create JDBC driver of class '' for connect URL

    使用数据库数据源的web 项目,发布后,访问数据库500报错: 浏览器端: 控制台: 数据库连接池在不启动Tomcat的情况下,测试类通过,没有问题. 一旦在服务器发布,就会出现问题,考虑是Tomca ...