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 行背景颜色的交替显示(隔行变色)实现代码
Dec 13 Javascript
js unicode 编码解析关于数据转换为中文的两种方法
Apr 21 Javascript
常见JS验证脚本汇总
Dec 01 Javascript
JavaScript日期对象(Date)基本用法示例
Jan 18 Javascript
js实现三级联动效果(简单易懂)
Mar 27 Javascript
运用jQuery写的验证表单(实例讲解)
Jul 06 jQuery
基于vue-cli npm run build之后vendor.js文件过大的解决方法
Sep 27 Javascript
详解VUE里子组件如何获取父组件动态变化的值
Dec 26 Javascript
基于mpvue搭建微信小程序项目框架的教程详解
Apr 10 Javascript
vue excel上传预览和table内容下载到excel文件中
Dec 10 Javascript
小程序实现背景音乐播放和暂停
Jun 19 Javascript
js实现鼠标滑动到某个div禁止滚动
Sep 17 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
NOT NULL 和NULL
2007/01/15 PHP
MySql 按时间段查询数据方法(实例说明)
2008/11/02 PHP
PHP函数学习之PHP函数点评
2012/07/05 PHP
codeigniter使用技巧批量插入数据实例方法分享
2013/12/31 PHP
PHP创建/删除/复制文件夹、文件
2016/05/03 PHP
php利用嵌套数组拼接与解析json的方法
2017/02/07 PHP
Laravel如何使用Redis共享Session
2018/02/23 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
2018/06/16 PHP
laravel-admin select框默认选中的方法
2019/10/03 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
用js+xml自动生成表格的东西
2006/12/21 Javascript
几款极品的javascript压缩混淆工具
2007/05/16 Javascript
ExtJs grid行 右键菜单的两种方法
2010/06/19 Javascript
基于jquery的checkbox下拉框插件代码
2010/06/25 Javascript
javascript 拖动表格行实现代码
2011/05/05 Javascript
jQuery提示效果代码分享
2014/11/20 Javascript
jQuery中find()方法用法实例
2015/01/07 Javascript
深入理解JavaScript系列(45):代码复用模式(避免篇)详解
2015/03/04 Javascript
一文读懂ES7中的javascript修饰器
2019/05/06 Javascript
微信小程序点击生成朋友圈分享图(遇到的坑)
2020/06/17 Javascript
Vue elementui字体图标显示问题解决方案
2020/08/18 Javascript
JavaScript日期库date-fn.js使用方法解析
2020/09/09 Javascript
JS实现无限轮播无倒退效果
2020/09/21 Javascript
tornado 多进程模式解析
2018/01/15 Python
Python实现合并同一个文件夹下所有PDF文件的方法示例
2018/04/28 Python
浅谈python实现Google翻译PDF,解决换行的问题
2018/11/28 Python
Python-ElasticSearch搜索查询的讲解
2019/02/25 Python
Nike澳大利亚官网:Nike.com (AU)
2019/06/03 全球购物
问卷调查计划书
2014/01/10 职场文书
学子宴答谢词
2014/01/25 职场文书
超市采购员岗位职责
2014/02/01 职场文书
爱心捐款感谢信
2015/01/20 职场文书
单位工作证明范本
2015/06/15 职场文书
《曹冲称象》教学反思
2016/02/20 职场文书
Python安装及建立虚拟环境的完整步骤
2022/06/25 Servers