当达到输入长度时表单自动切换焦点


Posted in Javascript onApril 06, 2014

当达到输入长度时表单自动切换焦点
有时候会遇到和上面类似的表单字段。我们可以给每个字段限制输入长度,当达到输入长度时自动切换焦点,以增强表单的易用性

<form id="myForm"> 
<input type="text" name="tel1" id="txt1" maxlength="3">- 
<input type="text" name="tel2" id="txt2" maxlength="3">- 
<input type="text" name="tel3" id="txt3" maxlength="4"> 
<br> 
<input type="submit" value="Submit"> 
</form>

(function () { 
function tabForward(e) { 
e = e || window.event; 
var target = e.target || e.srcElement; if (target.value.length === target.maxLength) { 
var form = target.form; 
for (var i = 0, len = form.elements.length; i < len; i++) { 
if (form.elements[i] === target) { 
if (form.elements[i++]) { 
form.elements[i++].focus(); 
} 
break; 
} 
} 
} 
} 
var textbox1 = document.getElementById("txt1"); 
var textbox2 = document.getElementById("txt2"); 
var textbox3 = document.getElementById("txt3"); 
textbox1.addEventListener("keyup", tabForward, false); 
textbox2.addEventListener("keyup", tabForward, false); 
textbox3.addEventListener("keyup", tabForward, false); 
})();

代码其实很简单,判断输入字符串长度是否和事件目标的maxLength属性长度相等,若相等,且表单还有下一个字段,则自动切换到下一个焦点。

简单说下两个属性:

target.form form属性指向当前字段所属表单的指针,它是只读的

form.elements elements属性是表单中所有表单元素(字段)的集合。这个elements集合是一个有序列表,其中包含着表单中的所有字段,例如<input>、<textarea>、<button>和<fieldset>。每个表单字段在elements集合中的顺序,与他们出现在标记中的顺序相同,可以按照位置和name特性来访问它们。例如:

var form = document.getElementById("myForm"); 
var textbox1 = form.elements[0]; 
var textbox2 = form.elements["tel2"];

最后,我们再来看看上面的代码,发现它还存在一些问题,比如这段代码
var textbox1 = document.getElementById("txt1"); 
var textbox2 = document.getElementById("txt2"); 
var textbox3 = document.getElementById("txt3"); textbox1.addEventListener("keyup", tabForward, false); 
textbox2.addEventListener("keyup", tabForward, false); 
textbox3.addEventListener("keyup", tabForward, false);

发现没有,我们给每个字段添加了相同的事件处理程序。如果在复杂的web应用程序中,对每个元素都采用这种方式,那么结果就会有数不清的代码用于添加事件处理程序。此时,可以利用事件委托来解决这个问题

其他代码不变,将上面六行代码换为下面的两行会得到相同的结果,是不是感觉好多了呢

var form = document.getElementById("myForm"); 
form.addEventListener("keyup", tabForward, false);

那什么又是事件委托呢,简单说下原理,详细内容这里不解释

事件委托利用了事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。比如,这里的keyup事件,只需给form元素指定一个onkeyup事件处理程序,而不必给每个字段添加事件

Javascript 相关文章推荐
javascript XML数据显示为HTML一例
Dec 23 Javascript
js动态修改整个页面样式达到换肤效果
May 23 Javascript
node.js中的fs.lchmodSync方法使用说明
Dec 16 Javascript
jQuery获取URL请求参数的方法
Jul 18 Javascript
微信小程序使用modal组件弹出对话框功能示例
Nov 29 Javascript
使用vue + less 实现简单换肤功能的示例
Feb 21 Javascript
node的process以及child_process模块学习笔记
Mar 06 Javascript
jQuery实现下拉菜单动态添加数据点击滑出收起其他功能
Jun 14 jQuery
每个 JavaScript 工程师都应懂的33个概念
Oct 22 Javascript
vue+web端仿微信网页版聊天室功能
Apr 30 Javascript
layui 对弹窗 form表单赋值的实现方法
Sep 04 Javascript
Vue项目中如何使用Axios封装http请求详解
Oct 23 Javascript
javascript中的取反再取反~~没有意义
Apr 06 #Javascript
jQuery toggleClass应用实例(附效果图)
Apr 06 #Javascript
javascript数组操作总结和属性、方法介绍
Apr 05 #Javascript
JavaScript中的prototype和constructor简明总结
Apr 05 #Javascript
JavaScript中的typeof操作符用法实例
Apr 05 #Javascript
Javascript排序算法之计数排序的实例
Apr 05 #Javascript
JavaScript中的正则表达式简明总结
Apr 04 #Javascript
You might like
mysql From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函数
2010/03/21 PHP
Yii使用ajax验证显示错误messagebox的解决方法
2014/12/03 PHP
PHP Opcache安装和配置方法介绍
2015/05/28 PHP
又一个小巧的图片预加载类
2007/05/05 Javascript
jQuery 源码分析笔记(6) jQuery.data
2011/06/08 Javascript
基于jquery的固定表头和列头的代码
2012/05/03 Javascript
JS继承--原型链继承和类式继承
2013/04/08 Javascript
jquery cookie实现的简单换肤功能适合小网站
2013/08/25 Javascript
浅谈javascript六种数据类型以及特殊注意点
2013/12/20 Javascript
简述JavaScript对传统文档对象模型的支持
2015/06/16 Javascript
解决jquery实现的radio重新选中的问题
2015/07/03 Javascript
JS判断元素是否在数组内的实现代码
2016/03/30 Javascript
jquery css实现邮箱自动补全
2016/11/14 Javascript
jQuery中animate的几种用法与注意事项
2016/12/12 Javascript
JavaScript 实现 Tab 点击切换实例代码
2017/03/25 Javascript
详解AngularJS 路由 resolve用法
2017/04/24 Javascript
vue-cli构建项目使用 less的方法
2017/10/04 Javascript
mui框架 页面无法滚动的解决方法(推荐)
2018/01/25 Javascript
seajs和requirejs模块化简单案例分析
2019/08/26 Javascript
[02:09:59]火猫TV国士无双dota2 6.82版本详解(下)
2014/09/29 DOTA
python判断端口是否打开的实现代码
2013/02/10 Python
举例讲解Python的lambda语句声明匿名函数的用法
2016/07/01 Python
在Python中增加和插入元素的示例
2018/11/01 Python
Anaconda之conda常用命令介绍(安装、更新、删除)
2019/10/06 Python
Python使用psutil获取进程信息的例子
2019/12/17 Python
Pycharm连接远程服务器过程图解
2020/04/30 Python
如何使用pycharm连接Databricks的步骤详解
2020/09/23 Python
一款纯css3实现的tab选项卡的实列教程
2014/12/11 HTML / CSS
html5页面结构_动力节点Java学院整理
2017/07/10 HTML / CSS
护理学应聘自荐书范文
2014/02/05 职场文书
实习会计求职自荐信范文
2014/03/10 职场文书
校园联欢晚会主持词
2014/03/17 职场文书
品牌推广策划方案
2014/05/28 职场文书
父亲节活动总结
2015/02/12 职场文书
如何利用JavaScript实现二叉搜索树
2021/04/02 Javascript
SQL Server携程核心系统无感迁移到MySQL实战
2022/06/01 SQL Server