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


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中继承的三种方式
Oct 16 Javascript
javascript(jquery)利用函数修改全局变量的代码
Nov 02 Javascript
javascript多种数据类型表格排序代码分析
Sep 11 Javascript
jquery插件splitScren实现页面分屏切换模板特效
Jun 16 Javascript
jQuery Mobile页面返回不需要重新get
Apr 26 Javascript
js HTML5 Canvas绘制转盘抽奖
Sep 13 Javascript
AngularJS通过$location获取及改变当前页面的URL
Sep 23 Javascript
js获取地址栏中传递的参数(两种方法)
Feb 08 Javascript
JS实现将链接生成二维码并转为图片的方法
Mar 17 Javascript
JS中创建自定义类型的常用模式总结【工厂模式,构造函数模式,原型模式,动态原型模式等】
Jan 19 Javascript
解决在layer.open中使用时间控件laydate失败的问题
Sep 11 Javascript
JS字符串补全方法padStart()和padEnd()
May 27 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中用memcached实现页面防刷新功能
2014/08/19 PHP
ThinkPHP进程计数类Process用法实例详解
2015/09/25 PHP
thinkPHP交易详情查询功能详解
2016/12/02 PHP
解决extjs在firefox中关闭窗口再打开后iframe中js函数访问不到的问题
2008/11/06 Javascript
jQuery 自动增长的文本输入框实现代码
2010/04/02 Javascript
Javascript实现关联数据(Linked Data)查询及注意细节
2013/02/22 Javascript
jquery中load方法的用法及注意事项说明
2014/02/22 Javascript
js的Boolean对象初始值示例
2014/03/04 Javascript
你可能不知道的JavaScript的new Function()方法
2014/04/17 Javascript
jQuery $命名冲突解决方案汇总
2014/11/13 Javascript
javascript的document中的动态添加标签实现方法
2016/10/24 Javascript
js实现简单的获取验证码按钮效果
2017/03/03 Javascript
vuejs响应用户事件(如点击事件)
2017/03/14 Javascript
HTML的select控件美化
2017/03/27 Javascript
JavaScript实现数值自动增加动画
2017/12/28 Javascript
js正则表达式校验指定字符串的方法
2018/07/23 Javascript
Nodejs实现多文件夹文件同步
2018/10/17 NodeJs
详解vue组件中使用路由方法
2019/02/12 Javascript
vue实现导航标题栏随页面滚动渐隐渐显效果
2020/03/12 Javascript
python getopt详解及简单实例
2016/12/30 Python
python+Splinter实现12306抢票功能
2018/09/25 Python
pyshp创建shp点文件的方法
2018/12/31 Python
Pytorch之保存读取模型实例
2019/12/30 Python
为什么说python适合写爬虫
2020/06/11 Python
HTML5不支持frameset的两种解决方法
2016/11/14 HTML / CSS
使用canvas实现黑客帝国数字雨效果
2020/01/02 HTML / CSS
《小山羊和小灰兔》教学反思
2014/02/19 职场文书
中秋节主持词
2014/04/02 职场文书
幼儿园大班评语大全
2014/04/17 职场文书
驾驶员培训方案
2014/05/01 职场文书
财务会计专业求职信
2014/06/09 职场文书
校庆标语集锦
2014/06/25 职场文书
纪检干部现实表现材料
2014/08/21 职场文书
学习优秀党员杨宗兴先进事迹材料思想汇报
2014/09/14 职场文书
给学校的建议书400字
2015/09/14 职场文书
幼儿园托班开学寄语(2016秋季)
2015/12/03 职场文书