自动切换焦点

使用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. tomcat关闭时Log4j2报错 Log4j Log4j2-TF-4-Scheduled-1 memory leak

    出错信息: 23-Sep-2017 17:43:18.964 警告 [main] org.apache.catalina.loader.WebappClassLoaderBase.clearRefer ...

  2. 探索未知种族之osg类生物---渲染遍历之裁剪二

    前言 上一节我们大致上过了一遍sceneView::cull()函数,通过研究,我们发现上图中的这一部分的代码才是整个cull过程的核心部分.所以今天我们来仔细的研究一下这一部分. sceneView ...

  3. Spring @Value取值为null或@Autowired注入失败

    @Value 用于注入.properties文件中定义的内容 @Autowired 用于装配bean 用法都很简单,很直接,但是稍不注意就会出错.下面就来说说我遇到的问题. 前两天在项目中遇到了一个问 ...

  4. 怎么把微信里的文件发到QQ?

    对于如何将微信里的文件发到QQ这个问题,首先要看是在手机中操作还是在电脑上操作,针对不同的发送方式逐一介绍如下: 一.从手机微信发送文件到QQ 1.在手机微信中找到需要发送的文件打开,点击右上角竖排的 ...

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

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

  6. 桌面小部件Wight父类AppWidgetProvider的三个方法

    onUpdate()这个方法会在每次更新App Widget的时候调用,数据更新的逻辑都写在这个方法里边.而且要注意的是:在用户添加小部件的时候,会首先调用这个方法,应该在这个方法里进行初始化操作,比 ...

  7. shutil模块和os模块对比

    一.shutil -- 是一种高层次的文件操作工具类似于高级API,而且主要强大之处在于其对文件的复制与删除操作更是比较支持好. 1.shutil.copy(src,dst)复制一个文件到另一个目录下 ...

  8. easyui_validatebox常用验证

    $.extend($.fn.validatebox.defaults.rules, { idcard: {// 验证身份证 validator: function (value) { return / ...

  9. dremio jdbc使用

    驱动包地址 链接:https://pan.baidu.com/s/1Nivkvze24hRH8pXOQleCgw 提取码:gp9z 使用dremio主要原因 : 1)springboot提供了es组件 ...

  10. thinkphp 把小程序码二进制流存储到本地

    public function getxcxm(){ $id = input('id'); $astk = json_decode($this->getasstk())->access_t ...