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 生成指定范围数值随机数
Jan 09 Javascript
JQuery困惑—包装集 DOM节点
Oct 16 Javascript
jquery控制listbox中项的移动并排序的实现代码
Sep 28 Javascript
ajax java 实现自动完成功能
Dec 19 Javascript
javascript数组去重方法汇总
Apr 23 Javascript
js实现div拖动动画运行轨迹效果代码分享
Aug 27 Javascript
JavaScript实现非常简单实用的下拉菜单效果
Aug 27 Javascript
基于jQuery实现以手风琴方式展开和折叠导航菜单
Jan 28 Javascript
如何使用jquery修改css中带有!important的样式属性
Apr 28 Javascript
js仿微信语音播放实现思路
Dec 12 Javascript
在vue中封装的弹窗组件使用队列模式实现方法
Jul 23 Javascript
VUE动态生成word的实现
Jul 26 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
php5 and xml示例
2006/11/22 PHP
php 多个submit提交表单 处理方法
2009/07/07 PHP
用PHP的超级变量$_POST获取HTML表单(HTML Form) 数据
2011/05/07 PHP
PHP文章采集URL补全函数(FormatUrl)
2012/08/02 PHP
ThinkPHP3.1数据CURD操作快速入门
2014/06/19 PHP
PHP中foreach()用法汇总
2015/07/02 PHP
PHP 生成微信红包代码简单
2016/03/25 PHP
Yii2中多表关联查询hasOne hasMany的方法
2017/02/15 PHP
PHP cURL获取微信公众号access_token的实例
2018/04/28 PHP
jquery入门—数据删除与隔行变色以及图片预览
2013/01/07 Javascript
js substr支持中文截取函数代码(中文是双字节)
2013/04/17 Javascript
你必须知道的JavaScript 变量命名规则详解
2013/05/07 Javascript
jquery的flexigrid无法显示数据提示获取到数据
2013/07/19 Javascript
JavaScript的事件绑定(方便不支持js的时候)
2013/10/01 Javascript
jquery常用特效方法使用示例
2014/04/25 Javascript
JavaScript中字符串(string)转json的2种方法
2015/06/25 Javascript
Bootstrap风格的WPF样式
2016/12/07 Javascript
浅谈事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
2017/07/22 jQuery
Vue 兄弟组件通信的方法(不使用Vuex)
2017/10/26 Javascript
Vue v-for循环之@click点击事件获取元素示例
2019/11/09 Javascript
vue2.x 对象劫持的原理实现
2020/04/19 Javascript
vue 内联样式style中的background用法说明
2020/08/05 Javascript
Python内置函数dir详解
2015/04/14 Python
python 3调用百度OCR API实现剪贴板文字识别
2018/09/04 Python
python 将字符串完成特定的向右移动方法
2019/06/11 Python
python里dict变成list实例方法
2019/06/26 Python
PyCharm搭建Spark开发环境的实现步骤
2019/09/05 Python
python内置函数sorted()用法深入分析
2019/10/08 Python
python的json中方法及jsonpath模块用法分析
2019/12/06 Python
基于Tensorflow批量数据的输入实现方式
2020/02/05 Python
iframe跨域的几种常用方法
2019/11/11 HTML / CSS
小学家长通知书评语
2014/12/31 职场文书
2015年三年级班主任工作总结
2015/05/21 职场文书
筑梦中国心得体会
2016/01/18 职场文书
用 Python 定义 Schema 并生成 Parquet 文件详情
2021/09/25 Python
springboot新建项目pom.xml文件第一行报错的解决
2022/01/18 Java/Android