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数组中如何随机取出一个值
Jun 13 Javascript
基于jQuery实现的无刷新表格分页实例
Feb 17 Javascript
JQuery EasyUI学习教程之datagrid 添加、修改、删除操作
Jul 09 Javascript
JS实现鼠标滑过显示边框的菜单效果
Sep 21 Javascript
jquery Ajax 全局调用封装实例详解
Jan 16 Javascript
利用 spin.js 生成等待效果(js 等待效果)
Jun 25 Javascript
详解AngularJS ng-class样式切换
Jun 27 Javascript
使用JavaScript根据图片获取条形码的方法
Jul 04 Javascript
原生javascript制作的拼图游戏实现方法详解
Feb 23 Javascript
js实现百度登录窗口拖拽效果
Mar 19 Javascript
使用eslint和githooks统一前端风格的技巧
Jul 29 Javascript
vue3.0自定义指令(drectives)知识点总结
Dec 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
PHP 实用代码收集
2010/01/22 PHP
php 伪静态之IIS篇
2014/06/02 PHP
PHP base64编码后解码乱码的解决办法
2014/06/19 PHP
十大使用PHP框架的理由
2015/09/26 PHP
PHP7 新增功能
2021/03/09 PHP
JavaScript入门教程(7) History历史对象
2009/01/31 Javascript
动态改变div的z-index属性的简单实例
2013/08/08 Javascript
javascript常用代码段搜集
2014/12/04 Javascript
jQuery移动web开发之页面跳转和加载外部页面的实现
2015/12/04 Javascript
javascript 分号总结及详细介绍
2016/09/24 Javascript
jQuery实现简单的计时器功能实例分析
2017/08/29 jQuery
Three.js实现浏览器变动时进行自适应的方法
2017/09/26 Javascript
swiper插件自定义切换箭头按钮
2017/12/28 Javascript
layui固定下拉框的显示条数(有滚动条)的方法
2019/09/10 Javascript
微信小程序全局变量的设置、使用、修改过程解析
2019/09/24 Javascript
javascript实现简单页面倒计时
2021/03/02 Javascript
跟老齐学Python之画圈还不简单吗?
2014/09/20 Python
python实现简单的计时器功能函数
2015/03/14 Python
Perl中著名的Schwartzian转换问题解决实现
2015/06/02 Python
Python简单实现控制电脑的方法
2018/01/22 Python
Python实现的HMacMD5加密算法示例
2018/04/03 Python
Python实现查找数组中任意第k大的数字算法示例
2019/01/23 Python
Python爬虫之UserAgent的使用实例
2019/02/21 Python
Django REST framework 如何实现内置访问频率控制
2019/07/23 Python
如何导出python安装的所有模块名称和版本号到文件中
2020/06/05 Python
python--shutil移动文件到另一个路径的操作
2020/07/13 Python
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
2021/02/03 Python
CSS 3.0文字悬停跳动特效代码
2020/10/26 HTML / CSS
html5中valid、invalid、required的定义
2014/02/21 HTML / CSS
澳大利亚家具和家居用品在线商店:Interiors Online
2018/03/05 全球购物
ellesse美国官方商店:意大利高级运动服品牌
2019/10/29 全球购物
喝酒检查书范文
2014/02/23 职场文书
办公室文员岗位职责范本
2014/06/12 职场文书
网上祭英烈活动总结
2015/02/04 职场文书
关于职业道德的心得体会
2016/01/18 职场文书
SQL语句多表联合查询的方法示例
2022/04/18 MySQL