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


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 兼容多浏览器的回车和鼠标焦点事件代码(IE6/7/8,firefox,chrome)
Apr 14 Javascript
JS控件的生命周期介绍
Oct 22 Javascript
script标签属性type与language使用选择
Dec 02 Javascript
jQuery链式操作如何实现以及为什么要用链式操作
Jan 17 Javascript
AngularJS语法详解(续)
Jan 23 Javascript
个人网站留言页面(前端jQuery编写、后台php读写MySQL)
May 03 Javascript
Vue中的v-cloak使用解读
Mar 27 Javascript
jquery实现静态搜索功能(可输入搜索文字)
Mar 28 jQuery
vue + element-ui的分页问题实现
Dec 17 Javascript
详解vue 命名视图
Aug 14 Javascript
javascript浅层克隆、深度克隆对比及实例解析
Feb 09 Javascript
JavaScript中this函数使用实例解析
Feb 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
header跳转和include包含问题详解
2012/09/08 PHP
php中防止恶意刷新页面的代码小结
2012/10/31 PHP
PHP合并数组的2种方法小结
2016/11/24 PHP
利用PHP如何统计Nginx日志的User Agent数据
2019/03/06 PHP
PHP7 标准库修改
2021/03/09 PHP
File, FileReader 和 Ajax 文件上传实例分析(php)
2011/04/27 Javascript
jQuery的选择器中的通配符使用介绍
2014/03/20 Javascript
Javascript基础教程之变量
2015/01/18 Javascript
Bootstrap编写一个同时适用于PC、平板、手机的登陆页面
2016/06/30 Javascript
Javascript 普通函数和构造函数的区别
2016/11/05 Javascript
jQuery html表格排序插件tablesorter使用方法详解
2017/02/10 Javascript
jQuery实现的简单在线计算器功能
2017/05/11 jQuery
jQuery zTree树插件动态加载实例代码
2017/05/11 jQuery
Jquery获取radio选中值实例总结
2019/01/17 jQuery
js实现滑动滑块验证登录
2020/07/24 Javascript
JavaScript中交换值的10种方法总结
2020/08/18 Javascript
在nodejs中创建child process的方法
2021/01/26 NodeJs
[47:03]完美世界DOTA2联赛PWL S3 Galaxy Racer vs Phoenix 第二场 12.10
2020/12/13 DOTA
分析python切片原理和方法
2017/12/19 Python
python实现指定字符串补全空格、前面填充0的方法
2018/11/16 Python
pandas去重复行并分类汇总的实现方法
2019/01/29 Python
解决yum对python依赖版本问题
2019/07/05 Python
python项目对接钉钉SDK的实现
2019/07/15 Python
python函数的万能参数传参详解
2019/07/26 Python
pygame实现贪吃蛇游戏(下)
2019/10/29 Python
python创建子类的方法分析
2019/11/28 Python
如何基于Python + requests实现发送HTTP请求
2020/01/13 Python
解决Python import docx出错DLL load failed的问题
2020/02/13 Python
python encrypt 实现AES加密的实例详解
2020/02/20 Python
JupyterNotebook 输出窗口的显示效果调整方法
2020/04/13 Python
商务日语专业毕业生求职信
2013/10/26 职场文书
写好自荐信的技巧
2013/11/08 职场文书
教师自荐信范文
2013/12/09 职场文书
英文简历中的自荐信范文
2013/12/14 职场文书
岗位廉政承诺书
2014/03/27 职场文书
公证处委托书
2015/01/28 职场文书