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


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判断两种格式的输入日期的正确性的代码
Mar 25 Javascript
ie下动态加态js文件的方法
Sep 13 Javascript
JavaScript1.6数组新特性介绍以及JQuery的几个工具方法
Dec 06 Javascript
深入解析AngularJS框架中$scope的作用与生命周期
Mar 05 Javascript
RequireJS 依赖关系的实例(推荐)
Jan 21 Javascript
详解Vue中使用v-for语句抛出错误的解决方案
May 04 Javascript
get  post jsonp三种数据交互形式实例详解
Aug 25 Javascript
vue实现商城购物车功能
Nov 27 Javascript
vue+echarts实现动态绘制图表及异步加载数据的方法
Oct 17 Javascript
webpack-mvc 传统多页面组件化开发详解
May 07 Javascript
express中static中间件的具体使用方法
Oct 17 Javascript
微信小程序复选框实现多选一功能过程解析
Feb 14 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 MySQL与分页效率
2008/06/04 PHP
php相当简单的分页类
2008/10/02 PHP
php is_file 判断给定文件名是否为一个正常的文件
2010/05/10 PHP
jquery ready()的几种实现方法小结
2010/06/18 Javascript
jquery load事件(callback/data)使用方法及注意事项
2013/02/06 Javascript
JS+flash实现chrome和ie浏览器下同时可以复制粘贴
2013/09/22 Javascript
对new functionName()定义一个函数的理解
2014/05/22 Javascript
不到30行JS代码实现Excel表格的方法
2014/11/15 Javascript
javascript css红色经典选项卡效果实现代码
2016/05/17 Javascript
JS模仿腾讯图片站的图片翻页按钮效果完整实例
2016/06/21 Javascript
关于json字符串与实体之间的严格验证代码
2016/11/10 Javascript
Angular.Js之Scope作用域的学习教程
2017/04/27 Javascript
js经验分享 JavaScript反调试技巧
2018/03/10 Javascript
Vue点击切换颜色的方法
2018/09/13 Javascript
详解js加减乘除精确计算
2019/03/19 Javascript
基于JS实现数字动态变化显示效果附源码
2019/07/18 Javascript
JS立即执行的匿名函数用法分析
2019/11/04 Javascript
Vue-CLI 3 scp2自动部署项目至服务器的方法
2020/07/24 Javascript
Vue 样式切换及三元判断样式关联操作
2020/08/09 Javascript
详解Vue中的自定义指令
2020/12/07 Vue.js
python 文件和路径操作函数小结
2009/11/23 Python
Python之PyUnit单元测试实例
2014/10/11 Python
Python版名片管理系统
2018/11/30 Python
python+selenium实现简历自动刷新的示例代码
2019/05/20 Python
Python实现一个数组除以一个数的例子
2019/07/20 Python
Django获取该数据的上一条和下一条方法
2019/08/12 Python
为什么python比较流行
2020/06/19 Python
详解如何使用CSS3中的结构伪类选择器和伪元素选择器
2020/01/06 HTML / CSS
yy婚礼主持词
2014/03/14 职场文书
医学生就业推荐表自我鉴定
2014/03/26 职场文书
技术合作协议书范本
2014/04/18 职场文书
大学优秀班主任事迹材料
2014/05/02 职场文书
药品营销策划方案
2014/06/15 职场文书
竞选班干部演讲稿300字
2014/08/20 职场文书
CSS几步实现赛博朋克2077风格视觉效果
2021/06/16 HTML / CSS
SpringBoot+Vue+JWT的前后端分离登录认证详细步骤
2021/09/25 Java/Android