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 相关文章推荐
javascript options属性集合操作代码
Dec 28 Javascript
扩展Jquery插件处理mouseover时内部有子元素时发生样式闪烁
Dec 08 Javascript
JS 实现Json查询的方法实例
Apr 12 Javascript
jQuery实现向下滑出的二级菜单效果实例
Aug 22 Javascript
JS实现仿百度文库评分功能
Jan 12 Javascript
基于jquery实现多级菜单效果
Jul 25 jQuery
JavaScript中立即执行函数实例详解
Nov 04 Javascript
详解vue2.0+vue-video-player实现hls播放全过程
Mar 02 Javascript
vue3.0 CLI - 2.6 - 组件的复用入门教程
Sep 14 Javascript
Vue源码中要const _toStr = Object.prototype.toString的原因分析
Dec 09 Javascript
vue keep-alive列表页缓存 详情页返回上一页不刷新,定位到之前位置
Nov 26 Javascript
vue.js Router中嵌套路由的实用示例
Jun 27 Vue.js
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
10款PHP开源商城系统汇总介绍
2015/07/23 PHP
php实现微信公众平台账号自定义菜单类
2015/10/11 PHP
PHP实现的统计数据功能详解
2016/12/06 PHP
phpcms配置列表页以及获得文章发布时间
2017/07/04 PHP
PHP实现的随机红包算法示例
2017/08/14 PHP
ExtJS 2.0实用简明教程 之Ext类库简介
2009/04/29 Javascript
js+css在交互上的应用
2010/07/18 Javascript
jQuery获取css z-index在各种浏览器中的返回值
2010/09/15 Javascript
js仿百度有啊通栏展示效果实现代码
2013/05/28 Javascript
12种不宜使用的Javascript语法整理
2013/11/04 Javascript
JavaScript中双叹号!!作用示例介绍
2014/09/21 Javascript
吐槽一下我所了解的Node.js
2014/10/08 Javascript
Angular用来控制元素的展示与否的原生指令介绍
2015/01/07 Javascript
基于Javascript实现倒计时功能
2016/02/22 Javascript
Javascript类型转换的规则实例解析
2016/02/23 Javascript
AngularJS基础 ng-switch 指令简单示例
2016/08/03 Javascript
学习vue.js中class与style绑定
2016/12/03 Javascript
原生js实现秒表计时器功能
2017/02/16 Javascript
理解Angular的providers给Http添加默认headers
2017/07/04 Javascript
详解react-webpack2-热模块替换[HMR]
2017/08/03 Javascript
nodejs express配置自签名https服务器的方法
2018/05/22 NodeJs
js回调函数仿360开机
2019/12/26 Javascript
Python3爬虫RedisDump的安装步骤
2021/02/20 Python
公司领导推荐信
2013/11/12 职场文书
大学生简历的个人自我评价
2013/12/04 职场文书
医药代表个人求职信范本
2013/12/19 职场文书
财务管理专业自荐信范文
2013/12/24 职场文书
大学生水果店创业计划书
2014/01/28 职场文书
优秀教师演讲稿
2014/05/06 职场文书
初中班级口号
2014/06/09 职场文书
2015年春训学习心得体会范文
2015/03/09 职场文书
2015年食品安全工作总结
2015/05/15 职场文书
2015团员个人年度总结
2015/11/24 职场文书
react使用antd的上传组件实现文件表单一起提交功能(完整代码)
2021/06/29 Javascript
Python 恐龙跑跑小游戏实现流程
2022/02/15 Python
JavaScript中的LHS和RHS分析详情
2022/04/06 Javascript