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


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 相关文章推荐
用于自动添加Digg This!按钮的JavaScript
Dec 23 Javascript
来自chinaz的ajax获取评论代码
May 03 Javascript
jQuery学习4 浏览器的事件模型
Feb 07 Javascript
深入理解JavaScript编程中的原型概念
Jun 25 Javascript
JQuery ztree带筛选、异步加载实例讲解
Feb 25 Javascript
Node.js Streams文件读写操作详解
Jul 04 Javascript
干货!教大家如何选择Vue和React
Mar 13 Javascript
深入浅析javascript继承体系
Oct 23 Javascript
jQuery md5加密插件jQuery.md5.js用法示例
Aug 24 jQuery
vue elementUI tree树形控件获取父节点ID的实例
Sep 12 Javascript
Vue服务端渲染实践之Web应用首屏耗时最优化方案
Mar 22 Javascript
Node Mongoose用法详解【Mongoose使用、Schema、对象、model文档等】
May 13 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
不用数据库的多用户文件自由上传投票系统(3)
2006/10/09 PHP
PHP新手上路(六)
2006/10/09 PHP
DOM XPATH获取img src值的query
2013/09/23 PHP
PHP批量上传图片的具体实现方法介绍.
2014/02/26 PHP
php文件系统处理方法小结
2016/05/23 PHP
php登录超时检测功能实例详解
2017/03/21 PHP
PHP依赖注入(DI)和控制反转(IoC)详解
2017/06/12 PHP
PHP基于面向对象实现的留言本功能实例
2018/04/04 PHP
PHP连接MySQL数据库操作代码实例解析
2020/07/11 PHP
解析JavaScript中的字符串类型与字符编码支持
2016/06/24 Javascript
js封装tab标签页实例分享
2016/12/19 Javascript
AngularJS实现网站换肤实例
2021/02/19 Javascript
Vue.js自定义指令的用法与实例解析
2017/01/18 Javascript
Vue使用vue-area-linkage实现地址三级联动效果的示例
2018/06/27 Javascript
js实现鼠标点击飘爱心效果
2020/08/19 Javascript
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
二种python发送邮件实例讲解(python发邮件附件可以使用email模块实现)
2013/12/03 Python
Python下载懒人图库JavaScript特效
2015/05/28 Python
Python实现Linux命令xxd -i功能
2016/03/06 Python
浅谈python中的面向对象和类的基本语法
2016/06/13 Python
Python中datetime模块参考手册
2017/01/13 Python
[原创]pip和pygal的安装实例教程
2017/12/07 Python
在pandas多重索引multiIndex中选定指定索引的行方法
2018/11/16 Python
python实现简单的文字识别
2018/11/27 Python
Python使用mongodb保存爬取豆瓣电影的数据过程解析
2019/08/14 Python
使用python将最新的测试报告以附件的形式发到指定邮箱
2019/09/20 Python
哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程
2020/05/07 Python
Python实现一个简单的毕业生信息管理系统的示例代码
2020/06/08 Python
Python JSON常用编解码方法代码实例
2020/09/05 Python
Python抖音快手代码舞(字符舞)的实现方法
2021/02/07 Python
CSS3 实现发光边框特效
2020/11/11 HTML / CSS
空气环保标语
2014/06/12 职场文书
我的梦想演讲稿500字
2014/08/21 职场文书
员工激励培训演讲稿
2014/09/16 职场文书
学校食品安全责任书
2015/01/29 职场文书
2016年11月份红领巾广播稿
2015/12/21 职场文书