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


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学习笔记(1)--用jQuery实现异步通信(用json传值)具体思路
Apr 08 Javascript
js相册效果代码(点击创建即可)
Apr 16 Javascript
eclipse如何忽略js文件报错(附图)
Oct 30 Javascript
一个通过script自定义属性传递配置参数的方法
Sep 15 Javascript
js实现模拟银行卡账号输入显示效果
Nov 18 Javascript
基于jQuery实现选取月份插件附源码下载
Dec 28 Javascript
JS中的进制转换以及作用
Jun 26 Javascript
使用json-server简单完成CRUD模拟后台数据的方法
Jul 12 Javascript
JavaScript读写二进制数据的方法详解
Sep 09 Javascript
clipboard在vue中的使用的方法示例
Oct 19 Javascript
qrcode生成二维码微信长按无法识别问题的解决
Apr 04 Javascript
Node中对非阻塞I/O、事件循环的知识点总结
Jan 05 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
PHP5 操作MySQL数据库基础代码
2009/09/29 PHP
微信支付PHP SDK ―― 公众号支付代码详解
2016/09/13 PHP
php版微信返回用户text输入的方法
2016/11/14 PHP
JavaScript中void(0)的具体含义解释
2007/02/27 Javascript
jQuery Dialog 弹出层对话框插件
2010/08/09 Javascript
js网页侧边随页面滚动广告效果实现
2011/04/14 Javascript
Javascript中call与apply的学习笔记
2014/09/22 Javascript
jQuery实现Tab菜单滚动切换的方法
2015/09/21 Javascript
很全面的JavaScript常用功能汇总集合
2016/01/22 Javascript
在Linux系统中搭建Node.js开发环境的简单步骤讲解
2016/01/26 Javascript
JS实现的仿QQ空间图片弹出效果代码
2016/02/23 Javascript
Bootstrap CSS组件之按钮组(btn-group)
2016/12/17 Javascript
jQuery Easyui datagrid editor为combobox时指定数据源实例
2016/12/19 Javascript
NodeJs安装npm包一直失败的解决方法
2017/04/28 NodeJs
详解使用angular的HttpClient搭配rxjs
2017/09/01 Javascript
详解Angular5 服务端渲染实战
2018/01/04 Javascript
webpack项目轻松混用css module的方法
2018/06/12 Javascript
原生js实现的移动端可拖动进度条插件功能详解
2019/08/15 Javascript
JS实现移动端双指缩放和旋转方法
2019/12/13 Javascript
[49:15]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第二场 1月19日
2021/03/11 DOTA
python常规方法实现数组的全排列
2015/03/17 Python
Python实现给文件添加内容及得到文件信息的方法
2015/05/28 Python
详解Python 函数如何重载?
2019/04/23 Python
用Python做一个久坐提醒小助手的示例代码
2020/02/10 Python
Python类的动态绑定实现原理
2020/03/21 Python
python如何输出反斜杠
2020/06/18 Python
python使用列表的最佳方案
2020/08/12 Python
Python中的特殊方法以及应用详解
2020/09/20 Python
详解Python中string模块除去Str还剩下什么
2020/11/30 Python
美国最便宜的旅游网站:CheapTickets
2017/07/09 全球购物
程序集与命名空间有什么不同
2014/07/25 面试题
工程售后服务承诺书
2014/05/21 职场文书
应聘会计求职信
2014/06/11 职场文书
国土资源局开展党的群众路线教育实践活动整改措施
2014/09/26 职场文书
小学教育见习报告
2014/10/31 职场文书
感谢信的格式
2015/01/21 职场文书