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窗口功能指南之在窗口中书写内容
Jul 21 Javascript
原生javascript获取元素样式属性值的方法
Dec 25 Javascript
EasyUI的treegrid组件动态加载数据问题的解决办法
Dec 11 Javascript
Js实现自定义右键行为
Mar 26 Javascript
JavaScript中数据结构与算法(四):串(BF)
Jun 19 Javascript
Bootstrap图片轮播组件使用实例解析
Jun 30 Javascript
Vue实例简单方法介绍
Jan 20 Javascript
vue2.0路由切换后页面滚动位置不变BUG的解决方法
Mar 14 Javascript
在vue2.0中引用element-ui组件库的方法
Jun 21 Javascript
记React connect的几种写法(小结)
Sep 18 Javascript
解决node-sass偶尔安装失败的方法小结
Dec 05 Javascript
对于防止按钮重复点击的尝试详解
Apr 22 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+DBM的同学录程序(2)
2006/10/09 PHP
使用Appcan客户端自动更新PHP版本号(全)
2015/07/31 PHP
php中如何执行linux命令详解
2018/11/06 PHP
PHP常用函数之获取汉字首字母功能示例
2019/10/21 PHP
js replace 与replaceall实例用法详解
2013/08/03 Javascript
jquery与prototype框架的详细对比
2013/11/21 Javascript
javascript中callee与caller的区别分析
2015/04/20 Javascript
学习JavaScript设计模式(接口)
2015/11/26 Javascript
javascript实现延时显示提示框特效代码
2016/04/27 Javascript
JavaScript从数组的indexOf()深入之Object的Property机制
2016/05/11 Javascript
AngularJS中的promise用法分析
2017/05/19 Javascript
vue高德地图之玩转周边
2017/06/16 Javascript
JavaScript 中的 this 工作原理
2018/06/20 Javascript
vue中实现左右联动的效果
2018/06/22 Javascript
Vant 在vue-cli 4.x中按需加载操作
2020/11/05 Javascript
[42:20]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
python读取html中指定元素生成excle文件示例
2014/04/03 Python
Python实现从订阅源下载图片的方法
2015/03/11 Python
Python2.x中str与unicode相关问题的解决方法
2015/03/30 Python
在Python中操作文件之truncate()方法的使用教程
2015/05/25 Python
Python设计模式之装饰模式实例详解
2019/01/21 Python
python利用7z批量解压rar的实现
2019/08/07 Python
Pytorch技巧:DataLoader的collate_fn参数使用详解
2020/01/08 Python
Python接口测试文件上传实例解析
2020/05/22 Python
python中的yield from语法快速学习
2020/11/06 Python
一款利用纯css3实现的360度翻转按钮的实例教程
2014/11/05 HTML / CSS
h5页面背景图很长要有滚动条滑动效果的实现
2021/01/27 HTML / CSS
基层党支部公开承诺书
2014/05/29 职场文书
美术社团活动总结
2014/06/27 职场文书
励志演讲稿800字
2014/08/21 职场文书
资产运营委托书范本
2014/10/16 职场文书
乡镇保密工作承诺书
2015/05/04 职场文书
100句拼搏进取的名言警句,值得一读!
2019/10/07 职场文书
初中运动会闭幕词范本3篇
2019/12/09 职场文书
利用js实现简单开关灯代码
2021/11/23 Javascript
Java tomcat手动配置servlet详解
2021/11/27 Java/Android