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


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 30 Javascript
体验js中splice()的强大(插入、删除或替换数组的元素)
Jan 16 Javascript
Jquery显示和隐藏元素或设为只读(含Ligerui的控件禁用,实例说明介绍)
Jul 09 Javascript
jQuery前端开发35个小技巧
May 24 Javascript
使用PBFunc在Powerbuilder中支付宝当面付款功能
Oct 01 Javascript
jQuery Easyui加载表格出错时在表格中间显示自定义的提示内容
Dec 08 Javascript
实现两个文本框同时输入的实例
Sep 25 Javascript
Angular自定义组件实现数据双向数据绑定的实例
Dec 11 Javascript
vue的全局变量和全局拦截请求器的示例代码
Sep 13 Javascript
vuejs中父子组件之间通信方法实例详解
Jan 17 Javascript
基于JQuery实现页面定时弹出广告
May 08 jQuery
js实现鼠标切换图片(无定时器)
Jan 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 的异常处理、错误的抛出及回调函数等面向对象的错误处理方法
2012/12/07 PHP
深入php常用函数的使用汇总
2013/06/08 PHP
学习php设计模式 php实现原型模式(prototype)
2015/12/07 PHP
PHP读取mssql json数据中文乱码的解决办法
2016/04/11 PHP
php实现的中文分词类完整实例
2017/02/06 PHP
php微信公众号开发之音乐信息
2018/10/20 PHP
jquery 应用代码 方便的排序功能
2010/02/06 Javascript
再论Javascript的类继承
2011/03/05 Javascript
JS声明变量背后的编译原理剖析
2012/12/28 Javascript
JavaScript中最简洁的编码html字符串的方法
2014/10/11 Javascript
JavaScript数组实现数据结构中的队列与堆栈
2016/05/26 Javascript
简单实现jQuery进度条轮播实例代码
2016/06/20 Javascript
Javascript学习之谈谈JS的全局变量跟局部变量(推荐)
2016/08/28 Javascript
完美解决JS文件页面加载时的阻塞问题
2016/12/18 Javascript
Angular实现点击按钮后在上方显示输入内容的方法
2017/12/27 Javascript
JS中的算法与数据结构之字典(Dictionary)实例详解
2019/08/20 Javascript
vue 使用外部JS与调用原生API操作示例
2019/12/02 Javascript
Vue + ts实现轮播插件的示例
2020/11/10 Javascript
Python中尝试多线程编程的一个简明例子
2015/04/07 Python
python使用PIL实现多张图片垂直合并
2019/01/15 Python
创建Django项目图文实例详解
2019/06/06 Python
如何在Django项目中引入静态文件
2019/07/26 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
2019/08/27 Python
解决Tensorflow sess.run导致的内存溢出问题
2020/02/05 Python
GafasWorld哥伦比亚:网上购买眼镜
2017/11/28 全球购物
The North Face北面法国官网:美国著名户外品牌
2019/11/01 全球购物
Fnac西班牙官网:法国文化和电子产品零售商
2021/03/14 全球购物
一些.net面试题
2014/10/06 面试题
大学生饮食连锁店创业计划书
2014/01/17 职场文书
老公给老婆的保证书
2014/04/28 职场文书
中班幼儿评语大全
2014/04/30 职场文书
小学学校评估方案
2014/06/08 职场文书
毕业生找工作求职信
2014/08/05 职场文书
财政局党的群众路线教育实践活动整改方案
2014/09/21 职场文书
2014年创先争优工作总结
2014/12/11 职场文书
幼儿园小班开学寄语
2015/05/27 职场文书