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 相关文章推荐
非常不错的功能强大代码简单的管理菜单美化版
Jul 09 Javascript
javascript web对话框与弹出窗口
Feb 22 Javascript
JavaScript 替换Html标签实现代码
Oct 14 Javascript
获取dom元素那些讨厌的位置封装代码
Jun 23 Javascript
JavaScript传递变量: 值传递?引用传递?
Feb 22 Javascript
读jQuery之五(取DOM元素)
Jun 20 Javascript
了解jQuery技巧来提高你的代码(个人觉得那个jquery的手册很不错)
Feb 10 Javascript
js动态修改整个页面样式达到换肤效果
May 23 Javascript
angularjs指令中的compile与link函数详解
Dec 06 Javascript
Jquery幻灯片特效代码分享--鼠标点击按钮时切换(1)
Aug 15 Javascript
JavaScript实现数组降维详解
Jan 05 Javascript
vue数据双向绑定的注意点
Jun 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
php日历[测试通过]
2008/03/27 PHP
php FLEA中二叉树数组的遍历输出
2012/09/26 PHP
PHP+jQuery 注册模块的改进(三):更新到Smarty3.1
2014/10/14 PHP
php中strtotime函数用法详解
2014/11/15 PHP
PHP生成唯一ID之SnowFlake算法
2016/12/17 PHP
动态添加js事件实现代码
2009/03/12 Javascript
Three.js源码阅读笔记(基础的核心Core对象)
2012/12/27 Javascript
jquery如何把参数列严格转换成数组实现思路
2013/04/01 Javascript
JS实现定时页面弹出类似QQ新闻的提示框
2013/11/07 Javascript
jquery解析xml字符串简单示例
2014/04/11 Javascript
js实现使用鼠标拖拽切换图片的方法
2015/05/04 Javascript
AngularJS 2.0新特性有哪些
2016/02/18 Javascript
超实用的JavaScript表单代码段
2016/02/26 Javascript
jQuery 获取屏幕高度、宽度的简单实现案例
2016/05/17 Javascript
页面向下滚动ajax获取数据的实现方法(兼容手机)
2016/05/24 Javascript
逻辑表达式中与或非的用法详解
2016/06/06 Javascript
jQuery Easyui datagrid/treegrid 清空数据
2016/07/09 Javascript
基于JavaScript实现幸运抽奖页面
2020/07/05 Javascript
微信小程序与后台PHP交互的方法实例分析
2018/12/10 Javascript
vue-cli中安装方法(图文详细步骤)
2018/12/12 Javascript
分享8个JavaScript库可更好地处理本地存储
2020/10/12 Javascript
[04:31]2016国际邀请赛中国区预选赛妖精采访
2016/06/27 DOTA
Python简单删除目录下文件以及文件夹的方法
2015/05/27 Python
Tensorflow之Saver的用法详解
2018/04/23 Python
对numpy中shape的深入理解
2018/06/15 Python
在unittest中使用 logging 模块记录测试数据的方法
2018/11/30 Python
Python操作mongodb数据库的方法详解
2018/12/08 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
2019/07/11 Python
python 子类调用父类的构造函数实例
2020/03/12 Python
如何利用CSS3制作3D效果文字具体实现样式
2013/05/02 HTML / CSS
详解CSS3:overflow属性
2020/11/17 HTML / CSS
开普敦通行证:Cape Town Pass
2019/07/18 全球购物
四查四看剖析材料
2014/02/14 职场文书
民事撤诉申请书范本
2015/05/18 职场文书
一文搞懂Python Sklearn库使用
2021/08/23 Python