javascript 事件处理示例分享


Posted in Javascript onDecember 31, 2014

废话少说,直接奉上示例代码:

<script type="text/javascript">

    function EventUtil() {

        var _self = this;

        ///添加事件

        var addEvent = (function () {

            if (document.addEventListener) {

                return function (el, type, fn) {

                    el.addEventListener(type, fn, false);

                }

            } else {

                return function (el, type, fn) {

                    el.attachEvent("on" + type, function () {

                        return fn.call(el, window.event);

                    });

                }

            }

        })();

        ///添加属性改变事件

        var addPropertyChangeEvent = function (obj, fn) {

            if (window.ActiveXObject) {

                obj.onpropertychange = fn;

            } else {

                obj.addEventListener("input", fn, false);

            }

        }

        //移除事件

        var removeEvent = function (obj, type, fn) {

            if (obj.removeEventListener) {

                obj.removeEventListener(type, fn, false);

            } else if (obj.detachEvent) {

                obj.detachEvent("on" + type, obj["on" + type + fn]);

                obj["on" + type + fn] = null;

            }

        }

        //加载事件

        var loadEvent = function (fn) {

            var oldonload = window.onload;

            if (typeof oldonload != "function") {

                window.onload = fn;

            } else {

                window.onload = function () {

                    oldonload();

                    fn();

                }

            }

        }

        //阻止事件

        var stopEvent = function (e) {

            e = e || window.event;

            if (e.preventDefault) {

                e.preventDefault();

                e.stopPropagation();

            } else {

                e.returnValue = false;

                e.cancelBubble = true;

            }

        }

        //如果仅仅是阻止事件冒泡

        var stopPropagation = function (e) {

            e = e || window.event;

            if (!+"\v1") {

                e.cancelBubble = true;

            } else {

                e.stopPropagation();

            }

        }

        //取得事件源对象

        var getEvent1 = function (e) {

            e = e || window.event;

            var obj = e.srcElement ? e.srcElement : e.target;

            return obj;

        }

        //取得事件源对象

        var getEvent2 = function (e) {

            if (window.event) return window.event;

            var c = getEvent2.caller;

            while (c.caller) {

                c = c.caller;

            }

            return c.arguments[0];

        }

        //或者这个功能更强大

        var getEvent3 = function (e) {

            var e = e || window.event;

            if (!e) {

                var c = this.getEvent3.caller;

                while (c) {

                    e = c.arguments[0];

                    if (e && (Event == e.constructor || MouseEvent == e.constructor)) {

                        break;

                    }

                    c = c.caller;

                }

            }

            var target = e.srcElement ? e.srcElement : e.target,

                    currentN = target.nodeName.toLowerCase(),

                    parentN = target.parentNode.nodeName.toLowerCase(),

                    grandN = target.parentNode.parentNode.nodeName.toLowerCase();

            return [e, target, currentN, parentN, grandN];

        }
        _self.addEvent = addEvent;

        _self.addPropertyChangeEvent = addPropertyChangeEvent;

        _self.removeEvent = removeEvent;

        _self.loadEvent = loadEvent;

        _self.stopEvent = stopEvent;

        _self.stopPropagation = stopPropagation;

        _self.getEvent1 = getEvent1;

        _self.getEvent2 = getEvent2;

        _self.getEvent3 = getEvent3;

    }

    var eventUtil = new EventUtil();

    eventUtil.loadEvent(function () {

        eventUtil.addEvent(document, "click", function (e) {

            alert(eventUtil.getEvent3(e));

        });

        eventUtil.addPropertyChangeEvent(document,function(e){

            alert(eventUtil.getEvent3(e));

        });

    });

</script>

javascript事件处理分为三个阶段:捕获 - 处理 - 起泡。

以点击按钮为例:
捕获阶段:由外层到内层,首先调用给Window注册的click捕获阶段监听方法,然后document、body、一层层的父节点,一直到按钮本身。

处理阶段:调用按钮本身的click监听方法。

起泡阶段:从按钮开始,从内层到外层,依次调用各级父节点的起泡阶段监听方法,直到Window。

但是,对于IE8及更低版本IE,不支持捕获阶段,因此捕获阶段的事件监听目前尚不通用。

通常的事件处理方法形式为:

function eventHandler(e) {  

    e = e || window.event;  

    var target = e.target || e.srcElement;  

    ... ...  

      

} 

e为事件对象,当事件触发时,作为参数传进来,但对于IE8及更低版本IE不适用,只能通过全局的event变量访问,好在不会出现同时处理两个事件的情况。

Javascript 相关文章推荐
初试jQuery EasyUI 使用介绍
Apr 01 Javascript
探讨jQuery的ajax使用场景(c#)
Dec 03 Javascript
JavaScript实现关键字高亮功能
Nov 12 Javascript
JavaScript中的操作符==与===介绍
Dec 31 Javascript
JavaScript实现广告的关闭与显示效果实例
Jul 02 Javascript
JavaScript实现瀑布流以及加载效果
Feb 11 Javascript
JS基于onclick事件实现单个按钮的编辑与保存功能示例
Feb 13 Javascript
EasyUI Datebox 日期验证之开始日期小于结束时间
May 19 Javascript
node.js基于express使用websocket的方法
Nov 09 Javascript
JS基于贪心算法解决背包问题示例
Nov 27 Javascript
js定时器出现第一次延迟的原因及解决方法
Jan 04 Javascript
vue自定义右键菜单之全局实现
Apr 09 Vue.js
JavaScript中的变量作用域介绍
Dec 31 #Javascript
JavaScript中的变量定义与储存介绍
Dec 31 #Javascript
JavaScript中的操作符==与===介绍
Dec 31 #Javascript
jQuery中[attribute]选择器用法实例
Dec 31 #Javascript
JavaScript中的比较操作符&gt;、=、
Dec 31 #Javascript
javascript 操作符(~、&amp;、|、^、)使用案例
Dec 31 #Javascript
JavaScript中的逻辑判断符&amp;&amp;、||与!介绍
Dec 31 #Javascript
You might like
PHP安装全攻略:APACHE
2006/10/09 PHP
无数据库的详细域名查询程序PHP版(5)
2006/10/09 PHP
PHP5与MySQL数据库操作常用代码 收集
2010/03/21 PHP
在win系统安装配置 Memcached for PHP 5.3 图文教程
2015/03/03 PHP
PHP实现WebService的简单示例和实现步骤
2015/03/27 PHP
PHP+RabbitMQ实现消息队列的完整代码
2019/03/20 PHP
深入浅析安装PhpStorm并激活的步骤详解
2020/09/17 PHP
JavaScript CSS修改学习第二章 样式
2010/02/19 Javascript
js调用AJAX时Get和post的乱码解决方法
2013/06/04 Javascript
jquery的map与get方法详解
2013/11/04 Javascript
Linux下使用jq友好的打印JSON技巧分享
2014/11/18 Javascript
JS获取各种宽度、高度的简单介绍
2014/12/19 Javascript
jQuery中prev()方法用法实例
2015/01/08 Javascript
JavaScript中字符串拼接的基本方法
2015/07/07 Javascript
JavaScript获取function所有参数名的方法
2015/10/30 Javascript
JavaScript生成验证码并实现验证功能
2016/09/24 Javascript
jquery实现的table排序功能示例
2017/03/10 Javascript
前端防止用户重复提交js实现代码示例
2018/09/07 Javascript
[50:22]完美盛典-2018年度红毯走秀
2018/12/16 DOTA
python益智游戏计算汉诺塔问题示例
2014/03/05 Python
使用Python进行AES加密和解密的示例代码
2018/02/02 Python
python调用OpenCV实现人脸识别功能
2018/05/25 Python
使用python爬虫获取黄金价格的核心代码
2018/06/13 Python
马来西亚综合购物网站:Lazada马来西亚
2018/06/05 全球购物
Yahoo的PHP面试题
2014/05/26 面试题
接口中的方法可以是abstract的吗
2015/07/23 面试题
学校安全责任书
2014/04/14 职场文书
副科竞争上岗演讲稿
2014/05/12 职场文书
求职信模板
2014/05/23 职场文书
机械工程学院大学生求职信
2014/05/25 职场文书
英语教育专业自荐信
2014/05/29 职场文书
土地转让协议书
2014/09/27 职场文书
2015年端午节活动方案
2015/05/05 职场文书
检讨书格式
2019/04/25 职场文书
Java9新特性对HTTP2协议支持与非阻塞HTTP API
2022/03/16 Java/Android
什么是Python装饰器?如何定义和使用?
2022/04/11 Python