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国旗变换效果代码
Aug 13 Javascript
jquery动态添加option示例
Dec 30 Javascript
JS实现div居中示例
Apr 17 Javascript
JavaScript遍历table表格中的某行某列并打印其值
Jul 08 Javascript
JS中的Replace方法使用经验分享
May 20 Javascript
AngularJs表单验证实例详解
May 30 Javascript
jQuery 限制输入字符串长度
Jun 20 Javascript
jQuery实现表格隔行及滑动,点击时变色的方法【测试可用】
Aug 20 Javascript
Validform表单验证总结篇
Oct 31 Javascript
jQuery UI仿淘宝搜索下拉列表功能
Jan 10 Javascript
TableSort.js表格排序插件使用方法详解
Feb 10 Javascript
JavaScript程序设计高级算法之动态规划实例分析
Nov 24 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
Terran历史背景
2020/03/14 星际争霸
ajax php 实现写入数据库
2009/09/02 PHP
yii插入数据库防并发的简单代码
2017/05/27 PHP
基于Jquery的实现回车键Enter切换焦点
2010/09/14 Javascript
关于document.cookie的使用javascript
2010/10/29 Javascript
重载toString实现JS HashMap分析
2011/03/13 Javascript
JQuery实现绚丽的横向下拉菜单
2013/12/19 Javascript
纯css+js写的一个简单的tab标签页带样式
2014/01/28 Javascript
jQuery实现当前页面标签高亮显示的方法
2015/03/10 Javascript
JavaScript继承模式粗探
2016/01/12 Javascript
基于原生JS实现图片裁剪
2016/08/01 Javascript
详解jQuery停止动画——stop()方法的使用
2016/12/14 Javascript
Bootstrap modal 多弹窗之叠加引起的滚动条遮罩阴影问题
2017/02/27 Javascript
JavaScript面向对象精要(下部)
2017/09/12 Javascript
JavaScript常用工具函数大全
2020/05/06 Javascript
JavaScript JSON使用原理及注意事项
2020/07/30 Javascript
vue-quill-editor插入图片路径太长问题解决方法
2021/01/08 Vue.js
python 运算符 供重载参考
2009/06/11 Python
详解Python中for循环的使用方法
2015/05/14 Python
Python常用的文件及文件路径、目录操作方法汇总介绍
2015/05/21 Python
Python实现更改图片尺寸大小的方法(基于Pillow包)
2016/09/19 Python
python回调函数中使用多线程的方法
2017/12/25 Python
Python 多维List创建的问题小结
2019/01/18 Python
Django框架model模型对象验证实现方法分析
2019/10/02 Python
Pyinstaller 打包发布经验总结
2020/06/02 Python
Python enumerate() 函数如何实现索引功能
2020/06/29 Python
Python3爬虫中Splash的知识总结
2020/07/10 Python
css3绘制百度的小度熊
2018/10/29 HTML / CSS
现代家居用品及礼品:LBC Modern
2018/06/24 全球购物
Maxpeedingrods美国:高性能汽车零件
2020/02/14 全球购物
师范生教师实习自我鉴定
2013/09/27 职场文书
工商管理系学生的自我评价分享
2013/11/29 职场文书
大学总结自我鉴定
2014/01/18 职场文书
总经理检讨书范文
2015/02/16 职场文书
公司慰问信范文
2015/03/23 职场文书
HTML中的表格元素介绍
2022/02/28 HTML / CSS