javascript实现按回车键切换焦点


Posted in Javascript onFebruary 09, 2015

前段时间学习了 HTML 和 CSS,对这方面产生了兴趣,也开始学习了 javascript 高级编程(第三版),这些天也一直在学,刚刚学到事件和表单脚本的内容。前几天,老师让编写一段代码:是在 javascript 表单中,用回车键和上下左右移动键使焦点从一个文本框移到上一个或下一个文本框中。应用目前为止学到的知识试着编写代码,在编写的过程中遇到了几个难点:取模计算;在函数内部用 this 和 arguments 找到触发事件;使用 addHandler() 方法为事件添加事件处理程序。在老师的帮助下解决了以上几个问题,自己觉得通过这段代码学到了很多知识点,所以整理完后写上注释,发表一下下。

<html>

<head lang="en">

    <meta charset="UTF-8">

    <title></title>

</head>

<body>

    <form>

        <div><input type="text" ></div>

        <div><input type="text" ></div>

        <div><input type="text" ></div>

        <div><input type="text" ></div>

        <div><input type="text" ></div>

        <div><input type="submit" ></div>

    </form>

    <script>

        function is_down(e) {

            var isDown;

            e = e || window.event;

            switch (e.keyCode) {

                case 13:  //回车键

                case 39:  //向右移动键

                case 40:  //向下移动键

                    isDown = true;

                    break;

                case 37:  //向左移动键

                case 38:  //向上移动键

                    isDown = false;

                    break;

            }

            return isDown;

        }

        function key_up(){

            //调用函数时,函数本身会生成 this 和 arguments

            //用 this 和 arguments 分别找到 field 和触发的事件

            var e=arguments[1];

            return is_down(e) === undefined ? true : handle_element(this, is_down(e));

        }

        function handle_element(field, is_down) {

            var elements = field.form.elements;

            for (var i = 0, len = elements.length-1; i < len; i++) {

                if (field == elements[i]) {

                    break;

                }

            }

            i = is_down ? (i + 1) % len : (i - 1) % len;

            //(0===i && is_down) --> 最后一个文本框获得焦点后按向下的键

            //(-1===i && !is_down) --> 第一个文本框获得焦点后按向上的键

            if((0===i && is_down)||(-1===i && !is_down)){

                return true;

            }

            elements[i].focus();

            var element_arr = ['button', 'submit', 'reset', 'select-one', 'textarea'];

            if (element_arr.join(',').indexOf(elements[i].type) > -1)

                elements[i].select();

            return false;

        }

        //取消回车默认提交表单事件

        document.onkeydown = function(e) {

            e = e || window.event;

            if(e.keyCode == 13) {

                e.preventDefault ? e.preventDefault() : (e.returnValue = false);

            }

        };

        //跨浏览器识别 addEventListener 和 attachEvent(IE)

        function addHandler(element, type, handler) {

            if (element.addEventListener)

                element.addEventListener(type, handler, false);

            else if (element.attachEvent)

                element.attachEvent("on" + type, handler);

            else

                element["on" + type] = handler;

        }

        var elements = document.forms[0].elements;

        for (var i = 0, len = elements.length; i < len; i++) {

            //为 keyup 事件添加 key_up 事件处理程序

            addHandler(elements[i], "keyup", key_up);

        }

    </script>

</body>

</html>

以上就是代码的全部内容了,个人感觉写的还算比较全面,该考虑到的地方都做了处理,希望大家能够喜欢。

Javascript 相关文章推荐
通过Jquery遍历Json的两种数据结构的实现代码
Jan 19 Javascript
jquery如何把参数列严格转换成数组实现思路
Apr 01 Javascript
js单例模式的两种方案
Oct 22 Javascript
JavaScript动态加载样式表的方法
Mar 21 Javascript
js判断手机号运营商的方法
Oct 23 Javascript
探索angularjs+requirejs全面实现按需加载的套路
Feb 26 Javascript
bootstrap css样式之表单
Jan 19 Javascript
常用的几个JQuery代码片段
Mar 13 Javascript
VueCli3.0中集成MockApi的方法示例
Jul 05 Javascript
vue中axios的二次封装实例讲解
Oct 14 Javascript
微信小程序中限制激励式视频广告位显示次数(实现思路)
Dec 06 Javascript
详解Typescript里的This的使用方法
Jan 08 Javascript
jquery中ajax使用error调试错误的方法
Feb 08 #Javascript
JQuery中extend的用法实例分析
Feb 08 #Javascript
jQuery中noConflict()用法实例分析
Feb 08 #Javascript
jquery实现聚光灯效果的方法
Feb 06 #Javascript
js实现Select下拉框具有输入功能的方法
Feb 06 #Javascript
JQuery中serialize()用法实例分析
Feb 06 #Javascript
jQuery中on()方法用法实例详解
Feb 06 #Javascript
You might like
利用php来自动调用不同服务器上的flash
2006/10/09 PHP
写php分页时出现的Fatal error的解决方法
2011/04/18 PHP
用php解析html的实现代码
2011/08/08 PHP
如何批量清理系统临时文件(语言:C#、 C/C++、 php 、python 、java )
2016/02/01 PHP
cakephp2.X多表联合查询join及使用分页查询的方法
2017/02/23 PHP
PHP使用curl_multi_select解决curl_multi网页假死问题的方法
2018/08/15 PHP
PHP封装的验证码工具类定义与用法示例
2018/08/22 PHP
Laravel5.1 框架响应基本用法实例分析
2020/01/04 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
爆炸式的JS圆形浮动菜单特效代码
2010/03/03 Javascript
js 动态加载事件的几种方法总结
2013/12/25 Javascript
EasyUI中combobox默认值注意事项
2015/03/01 Javascript
JS解析XML文件和XML字符串详解
2015/04/17 Javascript
JS实现的竖向折叠菜单代码
2015/10/21 Javascript
jquery特效 点击展示与隐藏全文
2015/12/09 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(一)
2016/02/16 Javascript
JavaScript实现弹出广告功能
2017/03/30 Javascript
MUI 上拉刷新/下拉加载功能实例代码
2017/04/13 Javascript
JS实现简单的浮动碰撞效果示例
2017/12/28 Javascript
详解Vue文档中几个易忽视部分的剖析
2018/03/24 Javascript
vue项目中使用百度地图的方法
2018/06/08 Javascript
基于mpvue的简单弹窗组件mptoast使用详解
2019/08/02 Javascript
vue请求服务器数据后绑定不上的解决方法
2019/10/30 Javascript
vue祖孙组件之间的数据传递案例
2020/12/07 Vue.js
[40:19]2018完美盛典CS.GO表演赛
2018/12/17 DOTA
Python类的动态修改的实例方法
2017/03/24 Python
Python使用Tkinter实现机器人走迷宫
2018/01/22 Python
Odoo中如何生成唯一不重复的序列号详解
2018/02/10 Python
五分钟学会HTML5的WebSocket协议
2019/11/22 HTML / CSS
最新的小工具和卓越的产品设计:Oh That Tech!
2019/08/07 全球购物
环境工程大学生自荐信
2013/10/21 职场文书
个人自荐材料
2014/05/23 职场文书
出售房屋委托书范本
2014/09/24 职场文书
2014年最新版离婚协议书范本
2014/11/25 职场文书
经典哲理警句:志不真则心不热,心不热则功不贤
2019/11/14 职场文书
js作用域及作用域链工作引擎
2022/07/07 Javascript