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 相关文章推荐
JQuery+CSS提示框实现思路及代码(纯手工打造)
May 07 Javascript
JS获取时间的方法
Jan 21 Javascript
jQuery插件实现大图全屏图片相册
Mar 14 Javascript
微信js-sdk分享功能接口常用逻辑封装示例
Oct 13 Javascript
javascript正则表达式模糊匹配IP地址功能示例
Jan 06 Javascript
理解 javascript 中的函数表达式与函数声明
Jul 07 Javascript
浅析JS中常用类型转换及运算符表达式
Jul 23 Javascript
通过jquery获取上传文件名称、类型和大小的实现代码
Apr 19 jQuery
webpack打包react项目的实现方法
Jun 21 Javascript
vue实现文字横向无缝走马灯组件效果的实例代码
Apr 09 Javascript
JavaScript判断浏览器版本的方法
Nov 03 Javascript
详解Vue3使用axios的配置教程
Apr 29 Vue.js
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
实用函数5
2007/11/08 PHP
PHP Global变量定义当前页面的全局变量实现探讨
2013/06/05 PHP
Mac OS下配置PHP+MySql环境
2015/02/25 PHP
PHP版本升级到7.x后wordpress的一些修改及wordpress技巧
2015/12/25 PHP
php实现将二维关联数组转换成字符串的方法详解
2017/07/31 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
2017/08/07 PHP
PHP接口继承及接口多继承原理与实现方法详解
2017/10/18 PHP
JavaScript表达式:URL 协议介绍
2013/03/10 Javascript
jQuery获取当前点击的对象元素(实现代码)
2016/05/19 Javascript
针对JavaScript中this指向的简单理解
2016/08/26 Javascript
js实现贪吃蛇小游戏(容易理解)
2017/01/22 Javascript
VUE中的无限循环代码解析
2017/09/22 Javascript
JS实现简单表格排序操作示例
2017/10/07 Javascript
React Native中Mobx的使用方法详解
2018/12/04 Javascript
this.$toast() 了解一下?
2019/04/18 Javascript
Angular封装搜索框组件操作示例
2019/04/25 Javascript
JS实现图片幻灯片效果代码实例
2020/05/21 Javascript
JavaScript实现跟随鼠标移动的盒子
2021/01/28 Javascript
[02:40]DOTA2英雄基础教程 炼金术士
2013/12/23 DOTA
[04:22]DSPL第二期精彩集锦:残血反杀!
2014/12/10 DOTA
为python设置socket代理的方法
2015/01/14 Python
python使用WMI检测windows系统信息、硬盘信息、网卡信息的方法
2015/05/15 Python
Python中标准库OS的常用方法总结大全
2017/07/19 Python
对Python3中的input函数详解
2018/04/22 Python
python opencv实现旋转矩形框裁减功能
2018/07/25 Python
python脚本当作Linux中的服务启动实现方法
2019/06/28 Python
python 多进程队列数据处理详解
2019/12/23 Python
python实现斗地主分牌洗牌
2020/06/22 Python
Python爬虫使用bs4方法实现数据解析
2020/08/25 Python
python 如何对logging日志封装
2020/12/02 Python
Myprotein台湾官方网站:全球领先的运动营养品牌
2018/12/10 全球购物
班组长安全职责
2014/01/05 职场文书
班子四风对照检查材料
2014/08/21 职场文书
大连星海广场导游词
2015/02/10 职场文书
2015年化验员工作总结
2015/04/10 职场文书
python中的class_static的@classmethod的巧妙用法
2021/06/22 Python