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 相关文章推荐
关于viewport,Ext.panel和Ext.form.panel的关系
May 07 Javascript
JavaScript Event学习第十章 一些可替换的事件对
Feb 10 Javascript
passwordStrength 基于jquery的密码强度检测代码使用介绍
Oct 08 Javascript
从阶乘函数对比Javascript和C#的异同
May 31 Javascript
9行javascript代码获取QQ群成员具体实现
Oct 16 Javascript
js/jQuery简单实现选项卡功能
Jan 02 Javascript
Jquery实现自定义弹窗示例
Mar 12 Javascript
Node.js中使用mongoose操作mongodb数据库的方法
Sep 12 Javascript
基于JSONP原理解析(推荐)
Dec 04 Javascript
vue3.0 CLI - 2.1 -  component 组件入门教程
Sep 14 Javascript
vue如何截取字符串
May 06 Javascript
vue elementUI table 自定义表头和行合并的实例代码
May 22 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 中的输出缓冲
2006/12/21 PHP
用PHP实现维护文件代码
2007/06/14 PHP
PHP实例分享判断客户端是否使用代理服务器及其匿名级别
2014/06/04 PHP
Ajax实现对静态页面的文章访问统计功能示例
2016/10/10 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
cnblogs中在闪存中屏蔽某人的实现代码
2010/11/14 Javascript
XMLHTTP 乱码的解决方法(UTF8,GB2312 编码 解码)
2011/01/12 Javascript
javascript实现可改变滚动方向的无缝滚动实例
2013/06/17 Javascript
document节点对象的获取方式示例介绍
2013/12/24 Javascript
JS修改iframe页面背景颜色的方法
2015/04/01 Javascript
简单谈谈javascript中的变量、作用域和内存问题
2015/08/30 Javascript
详解JavaScript函数
2015/12/01 Javascript
js实现刷新页面后回到记录时滚动条的位置【两种方案可选】
2016/12/12 Javascript
JQuery 进入页面默认给已赋值的复选框打钩
2017/03/23 jQuery
bootstrap 设置checkbox部分选中效果
2017/04/20 Javascript
js用类封装pop弹窗组件
2017/10/08 Javascript
js闭包学习心得总结
2018/04/17 Javascript
微信小程序实现红包功能(后端PHP实现逻辑)
2018/07/11 Javascript
JS html事件冒泡和事件捕获操作示例
2019/05/01 Javascript
vue中uni-app 实现小程序登录注册功能
2019/10/12 Javascript
ES2020让代码更优美的运算符 (?.) (??)
2021/01/04 Javascript
[48:24]完美世界DOTA2联赛循环赛LBZS vs Forest 第一场 10月30日
2020/10/31 DOTA
利用Python绘制数据的瀑布图的教程
2015/04/07 Python
Python实现图片转字符画的示例
2017/08/22 Python
详解python中自定义超时异常的几种方法
2019/07/29 Python
Python 闭包,函数分隔作用域,nonlocal声明非局部变量操作示例
2019/10/14 Python
详解从Django Allauth中进行登录改造小结
2019/12/18 Python
关于TensorFlow新旧版本函数接口变化详解
2020/02/10 Python
pytorch 常用函数 max ,eq说明
2020/06/28 Python
Python-split()函数实例用法讲解
2020/12/18 Python
药学职务聘任书
2014/03/29 职场文书
体操比赛口号
2014/06/10 职场文书
网络新闻该怎么写?这些写作技巧你都知道吗?
2019/08/26 职场文书
JavaGUI模仿QQ聊天功能完整版
2021/07/04 Java/Android
ssh服务器拒绝了密码 请再试一次已解决(亲测有效)
2022/08/14 Servers