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


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 相关文章推荐
js 页面输出值
Nov 30 Javascript
将函数的实际参数转换成数组的方法
Jan 25 Javascript
超级24小时弹窗代码 24小时退出弹窗代码 100%弹窗代码(IE only)
Jun 11 Javascript
jQuery遍历Form示例代码
Sep 03 Javascript
jquery.cookie() 方法的使用(读取、写入、删除)
Dec 05 Javascript
jQuery新的事件绑定机制on()示例应用
Jul 18 Javascript
jquery实现简单的自动播放幻灯片效果
Jun 13 Javascript
jQuery使用contains过滤器实现精确匹配方法详解
Feb 25 Javascript
详解JS正则replace的使用方法
Mar 06 Javascript
confirm确认对话框的实现方法总结
Jun 17 Javascript
使用Node搭建reactSSR服务端渲染架构
Aug 30 Javascript
浅谈JS for循环中使用break和continue的区别
Jul 21 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
PHILIPS L4X25T电路分析和打理
2021/03/02 无线电
PHP中=赋值操作符对不同数据类型的不同行为
2011/01/02 PHP
ajax返回值中有回车换行、空格的解决方法分享
2013/10/24 PHP
php文件缓存类汇总
2014/11/21 PHP
php浏览历史记录的方法
2015/03/10 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
通过onmouseover选项卡实现img图片的变化
2014/02/12 Javascript
PHP+MySQL+jQuery随意拖动层并即时保存拖动位置实例讲解
2015/10/09 Javascript
JavaScript中Window对象的属性及事件
2015/12/25 Javascript
Json解析的方法小结
2016/06/22 Javascript
js动态添加的DIV中的onclick事件简单实例
2016/07/25 Javascript
js利用clipboardData实现截屏粘贴功能
2016/10/12 Javascript
关于webuploader插件使用过程遇到的小问题
2016/11/07 Javascript
canvas实现图像截取功能
2017/02/06 Javascript
JavaScript基于扩展String实现替换字符串中index处字符的方法
2017/06/13 Javascript
详解Vue微信公众号开发踩坑全记录
2017/08/21 Javascript
angularJs复选框checkbox选中进行ng-show显示隐藏的方法
2018/10/08 Javascript
在vue中使用vant TreeSelect分类选择组件操作
2020/11/02 Javascript
Python文件读写常见用法总结
2019/02/22 Python
Python Django简单实现session登录注销过程详解
2019/08/06 Python
pytorch 实现在一个优化器中设置多个网络参数的例子
2020/02/20 Python
Python学习之time模块的基本使用
2021/01/17 Python
详解canvas drawImage()方法绘制图片不显示的问题
2018/10/08 HTML / CSS
HTML实现代码雨源码及效果示例
2020/02/25 HTML / CSS
Petmate品牌官方网站:宠物用品
2018/11/25 全球购物
武汉世纪畅想数字传播有限公司 .NET笔试题
2015/06/13 面试题
数据库测试通常都包括哪些方面
2015/11/30 面试题
《最可爱的人》教学反思
2014/02/14 职场文书
小学学雷锋活动总结
2014/04/25 职场文书
共产党员公开承诺践诺书
2014/05/28 职场文书
项目申请汇报材料
2014/08/16 职场文书
《落花生》教学反思
2016/02/16 职场文书
咖啡厅里的创业计划书
2019/08/21 职场文书
餐厅如何利用“营销策略”扭转亏本局面
2019/10/15 职场文书
利用Python网络爬虫爬取各大音乐评论的代码
2021/04/13 Python
JavaScript流程控制(分支)
2021/12/06 Javascript