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 相关文章推荐
限制文本字节数js代码
Mar 06 Javascript
jquery中eq和get的区别与使用方法
Apr 14 Javascript
jQuery中index()方法用法实例
Dec 27 Javascript
AngularGauge 属性解析详解
Sep 06 Javascript
javascript动画之磁性吸附效果篇
Dec 09 Javascript
基于jQuery代码实现圆形菜单展开收缩效果
Feb 13 Javascript
如何获取TypeScript的声明文件.d.ts
May 01 Javascript
vue.js template模板的使用(仿饿了么布局)
Aug 13 Javascript
vue interceptor 使用教程实例详解
Sep 13 Javascript
移动端自适应flexible.js的使用方法(不用三大框架,仅写一个单html页面使用)推荐
Apr 02 Javascript
angular 实现同步验证器跨字段验证的方法
Apr 11 Javascript
vue-mugen-scroll组件实现pc端滚动刷新
Aug 16 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实现将GB编码转换为UTF8
2006/11/25 PHP
PHP判断远程url是否有效的几种方法小结
2011/10/08 PHP
php获取操作系统语言代码
2013/11/04 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(九)
2014/06/24 PHP
php使用google地图应用实例
2014/12/31 PHP
PHP封装的HttpClient类用法实例
2015/06/17 PHP
Javascript模块模式分析
2008/05/16 Javascript
jquery控制listbox中项的移动并排序的实现代码
2010/09/28 Javascript
JS中获取数据库中的值的方法
2013/07/14 Javascript
jquery复选框checkbox实现删除前判断
2014/04/20 Javascript
js实现Select下拉框具有输入功能的方法
2015/02/06 Javascript
JavaScript——DOM操作——Window.document对象详解
2016/07/14 Javascript
jQuery简单注册和禁用全局事件的方法
2016/07/25 Javascript
javascript 中的事件委托详解
2016/10/25 Javascript
Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)
2016/11/22 Javascript
JavaScript实现格式化字符串函数String.format
2016/12/16 Javascript
gulp解决跨域的配置文件问题
2017/06/08 Javascript
vue-cli中打包图片路径错误的解决方法
2017/10/26 Javascript
浅谈vuejs实现数据驱动视图原理
2018/02/23 Javascript
超出JavaScript安全整数限制的数字计算BigInt详解
2018/06/24 Javascript
Vue在页面数据渲染完成之后的调用方法
2018/09/11 Javascript
弱类型语言javascript中 a,b 的运算实例小结
2019/08/07 Javascript
微信小程序实现滑动翻页效果(完整代码)
2019/12/06 Javascript
基于openlayers实现角度测量功能
2020/09/28 Javascript
django如何连接已存在数据的数据库
2018/08/14 Python
flask实现验证码并验证功能
2019/12/05 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
2020/11/27 Python
中国跨镜手机配件批发在线商店:TVC-Mall
2019/08/20 全球购物
乌克兰鞋类购物网站:Eobuv.com.ua
2020/11/28 全球购物
党校培训思想汇报
2013/12/30 职场文书
2014年两会学习心得体会
2014/03/10 职场文书
《黄山奇石》教学反思
2014/04/19 职场文书
青安岗事迹材料
2014/05/14 职场文书
国家助学金受助感言
2015/08/01 职场文书
如何撰写创业策划书
2019/06/27 职场文书
Mysql中的触发器定义及语法介绍
2022/06/25 MySQL