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 相关文章推荐
mailto的使用技巧分享
Dec 21 Javascript
JavaScript中的parse()方法使用简介
Jun 12 Javascript
js实现左侧网页tab滑动门效果代码
Sep 06 Javascript
深入理解jQuery()方法的构建原理
Dec 05 Javascript
js数字计算 误差问题的快速解决方法
Feb 28 Javascript
Angularjs 事件指令详细整理
Jul 27 Javascript
浅谈vue路径优化之resolve
Oct 13 Javascript
从零开始用electron手撸一个截屏工具的示例代码
Oct 10 Javascript
Vuex中的State使用介绍
Jan 19 Javascript
一步一步实现Vue的响应式(对象观测)
Sep 02 Javascript
ES6箭头函数和扩展实例分析
May 23 Javascript
一百多行代码实现react拖拽hooks
Mar 23 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
PHP7原生MySQL数据库操作实现代码
2020/07/03 PHP
JavaScript 数组的 uniq 方法
2008/01/23 Javascript
ie 调试javascript的工具
2009/04/29 Javascript
前端开发的开始---基于面向对象的Ajax类
2010/09/17 Javascript
基于jQuery的360图片展示实现代码
2012/06/14 Javascript
Javascript表格翻页效果实现思路及代码
2013/08/23 Javascript
Jquery操作radio的简单实例
2014/01/06 Javascript
javascript框架设计之浏览器的嗅探和特征侦测
2015/06/23 Javascript
jQuery实现切换页面过渡动画效果
2015/10/29 Javascript
EasyUI Pagination 分页的两种做法小结
2016/07/09 Javascript
解析Javascript单例模式概念与实例
2016/12/05 Javascript
scroll事件实现监控滚动条并分页显示(zepto.js)
2016/12/18 Javascript
详解升级react-router 4 踩坑指南
2017/08/14 Javascript
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
2017/09/12 jQuery
Node.js静态服务器的实现方法
2018/02/28 Javascript
解决js相同的正则多次调用test()返回的值却不同的问题
2018/10/10 Javascript
JS计算斐波拉切代码实例
2019/09/12 Javascript
使用p5.js实现动态GIF图片临摹重现
2019/10/23 Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
2020/07/28 Javascript
vue实现点击按钮“查看详情”弹窗展示详情列表操作
2020/09/09 Javascript
CentOS 6.5下安装Python 3.5.2(与Python2并存)
2017/06/05 Python
Python中摘要算法MD5,SHA1简介及应用实例代码
2018/01/09 Python
Python实现学校管理系统
2018/01/11 Python
python使用itchat实现手机控制电脑
2018/02/22 Python
Python 图像对比度增强的几种方法(小结)
2019/09/25 Python
双向RNN:bidirectional_dynamic_rnn()函数的使用详解
2020/01/20 Python
Python 的 __str__ 和 __repr__ 方法对比
2020/09/02 Python
利用CSS3的特性改变文本选中时的颜色
2013/09/11 HTML / CSS
html5利用canvas绘画二级树形结构图的示例
2017/09/27 HTML / CSS
详解移动端HTML5页面端去掉input输入框的白色背景和边框(兼容Android和ios)
2016/12/15 HTML / CSS
财务人员求职自荐书范文
2014/02/10 职场文书
学校春季防火方案
2014/06/08 职场文书
代领毕业证委托书
2014/08/02 职场文书
护士求职简历自我评价
2015/03/10 职场文书
毕业论文致谢信
2015/05/14 职场文书
2016新党章学习心得体会
2016/01/15 职场文书