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


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 相关文章推荐
让iframe框架网页在任何浏览器下自动伸缩
Aug 18 Javascript
jquery插件制作 手风琴Panel效果实现
Aug 17 Javascript
jQuery操作CheckBox的方法介绍(选中,取消,取值)
Feb 04 Javascript
20条学习javascript的编程规范的建议
Nov 28 Javascript
node.js中的fs.read方法使用说明
Dec 17 Javascript
Highcharts使用简例及异步动态读取数据
Dec 30 Javascript
基于Javascript实现弹出页面效果
Jan 01 Javascript
jQuery实现简单复制json对象和json对象集合操作示例
Jul 09 jQuery
JS实现简单的星期格式转换功能示例
Jul 23 Javascript
vue 实现在函数中触发路由跳转的示例
Sep 01 Javascript
如何在JavaScript中优雅的提取循环内数据详解
Mar 04 Javascript
基于ssm框架实现layui分页效果
Jul 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
深入了解php4(1)--回到未来
2006/10/09 PHP
基于PHP输出缓存(output_buffering)的深入理解
2013/06/13 PHP
浅析PHP安装扩展mcrypt以及相关依赖项(PHP安装PECL扩展的方法)
2013/07/05 PHP
php正则替换处理HTML页面的方法
2015/06/17 PHP
ThinkPHP发送邮件示例代码
2016/10/08 PHP
PHP实现将base64编码字符串转换成图片示例
2018/06/22 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
extjs 初始化checkboxgroup值的代码
2011/09/21 Javascript
jQuery实现 注册时选择阅读条款 左右移动
2013/04/11 Javascript
javascript新建标签,判断键盘输入,以及判断焦点(示例代码)
2013/11/25 Javascript
Javascript 浮点运算精度问题分析与解决
2014/03/26 Javascript
兼容IE、firefox以及chrome的js获取时间(getFullYear)
2014/07/04 Javascript
JavaScript中反正弦函数Math.asin()的使用简介
2015/06/14 Javascript
JavaScript程序中实现继承特性的方式总结
2016/06/24 Javascript
Jquery实现遮罩层的简单实例(就是弹出DIV周围都灰色不能操作)
2016/07/14 Javascript
使用微信小程序开发前端【快速入门】
2016/12/05 Javascript
javascript 单例模式详解及简单实例
2017/02/14 Javascript
微信小程序 基础组件与导航组件详细介绍
2017/02/21 Javascript
微信小程序选择图片和放大预览图片功能
2017/11/02 Javascript
jQuery length 和 size()区别总结
2018/04/26 jQuery
react中hook介绍以及使用教程
2020/12/11 Javascript
[00:44]TI7不朽珍藏III——军团指挥官不朽展示
2017/07/15 DOTA
Python中super关键字用法实例分析
2015/05/28 Python
Python内存管理方式和垃圾回收算法解析
2017/11/11 Python
scrapy-redis的安装部署步骤讲解
2019/02/27 Python
python递归函数用法详解
2020/10/26 Python
Django利用elasticsearch(搜索引擎)实现搜索功能
2020/11/26 Python
一款基于css3的动画按钮代码教程
2014/11/23 HTML / CSS
html5 input属性使用示例
2013/06/28 HTML / CSS
资源环境与城市管理专业推荐信
2013/11/30 职场文书
电子商务专业求职信
2014/03/08 职场文书
2014教师“四风问题”对照检查材料思想汇报
2014/09/16 职场文书
全国法院系统开展党的群众路线教育实践活动综述(全文)
2014/10/25 职场文书
世界水日宣传活动总结
2015/02/09 职场文书
商场圣诞节活动总结
2015/05/06 职场文书
WINDOWS 64位 下安装配置mysql8.0.25最详细的教程
2022/03/22 MySQL