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


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 相关文章推荐
jQuery 瀑布流 绝对定位布局(二)(延迟AJAX加载图片)
May 23 Javascript
JS定时器实例
Apr 17 Javascript
查看图片(前进后退)功能实现js代码
Apr 24 Javascript
js获得地址栏?问号后参数的方法
Aug 08 Javascript
javascript中Number对象的toString()方法分析
Dec 20 Javascript
jQuery往textarea中光标所在位置插入文本的方法
Jun 26 Javascript
基于jQuery实现搜索关键字自动匹配功能
Mar 26 Javascript
js removeChild 方法深入理解
Aug 16 Javascript
vue与原生app的对接交互的方法(混合开发)
Nov 28 Javascript
微信小程序发送短信验证码完整实例
Jan 07 Javascript
详解基于electron制作一个node压缩图片的桌面应用
Jan 29 Javascript
js作用域和作用域链及预解析
Apr 11 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
php下使用无限生命期Session的方法
2007/03/16 PHP
php下通过POST还是GET来传值
2008/06/05 PHP
php SQL Injection with MySQL
2011/02/27 PHP
ThinkPHP模板替换与系统常量及应用实例教程
2014/08/22 PHP
20个2014年最优秀的PHP框架回顾
2014/10/22 PHP
Docker 如何布置PHP开发环境
2016/06/21 PHP
js传值 判断
2006/10/26 Javascript
JS Replace()的高级使用方法介绍
2013/06/29 Javascript
JQuery分屏指示器图片轮换效果实例
2015/05/21 Javascript
JS实现网页上随机产生超链接地址的方法
2015/11/09 Javascript
jQuery动画效果图片轮播特效
2016/01/12 Javascript
JavaScript+html5 canvas制作的圆中圆效果实例
2016/01/27 Javascript
老生常谈javascript的类型转换
2016/10/12 Javascript
es7学习教程之fetch解决异步嵌套问题的方法示例
2017/07/21 Javascript
vue引入新版 vue-awesome-swiper插件填坑问题
2018/01/25 Javascript
vue动态注册组件实例代码详解
2019/05/30 Javascript
[02:23]DOTA2英雄基础教程 幻影长矛手
2013/12/09 DOTA
[51:29]Alliance vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
用Python从零实现贝叶斯分类器的机器学习的教程
2015/03/31 Python
Python引用模块和查找模块路径
2016/03/17 Python
python中快速进行多个字符替换的方法小结
2016/12/15 Python
python 读入多行数据的实例
2018/04/19 Python
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
2018/05/21 Python
python基于C/S模式实现聊天室功能
2019/01/09 Python
Python中new方法的详解
2019/01/15 Python
django框架实现模板中获取request 的各种信息示例
2019/07/01 Python
Python3 执行系统命令并获取实时回显功能
2019/07/09 Python
详解Anaconda安装tensorflow报错问题解决方法
2020/11/01 Python
牛津在线药房:Oxford Online Pharmacy
2020/11/16 全球购物
四年大学生活的个人自我评价
2013/12/11 职场文书
学员自我鉴定
2014/03/19 职场文书
经贸专业毕业生求职信范文
2014/05/01 职场文书
师德师风整改措施
2014/10/24 职场文书
护士求职自荐信
2015/03/25 职场文书
化验室安全管理制度
2015/08/06 职场文书
详解非极大值抑制算法之Python实现
2021/06/28 Python