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 相关文章推荐
js innerHTML 的一些问题的解决方法
Jun 22 Javascript
jQuery 入门讲解1
Apr 15 Javascript
javascript 数组排序函数
Aug 20 Javascript
细说浏览器特性检测(2)-通用事件检测
Nov 05 Javascript
jquery ajax 调用失败的原因示例介绍
Sep 27 Javascript
js防止DIV布局滚动时闪动的解决方法
Oct 30 Javascript
JS实现iframe自适应高度的方法示例
Jan 07 Javascript
详解如何在Vue2中实现组件props双向绑定
Mar 29 Javascript
javascript浏览器用户代理检测脚本实现方法
Oct 27 Javascript
微信小程序自定义组件之可清除的input组件
Jul 17 Javascript
vue-cli项目代理proxyTable配置exclude的方法
Sep 20 Javascript
Javascript实现鼠标点击冒泡特效
Dec 24 Javascript
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 变量定义方法
2009/06/14 PHP
Laravel 5 学习笔记
2015/03/06 PHP
php基于ob_start(ob_gzhandler)实现网页压缩功能的方法
2017/02/18 PHP
php基于session锁防止阻塞请求的方法分析
2017/08/07 PHP
jQuery load方法用法集锦
2011/12/06 Javascript
jquery()函数的三种语法介绍
2013/10/09 Javascript
web css实现整站样式互相切换
2013/10/29 Javascript
jqueyr判断checkbox组的选中(示例代码)
2013/11/08 Javascript
JS获取下拉列表所选中的TEXT和Value的实现代码
2014/01/11 Javascript
使用jQuery异步加载 JavaScript脚本解决方案
2014/04/20 Javascript
JS动态增加删除UL节点LI及相关内容示例
2014/05/21 Javascript
jquery对象和javascript对象即DOM对象相互转换
2014/08/07 Javascript
JavaScript使用二分查找算法在数组中查找数据的方法
2015/04/07 Javascript
javascript显式类型转换实例分析
2015/04/25 Javascript
jQuery下拉美化搜索表单效果代码分享
2015/08/25 Javascript
图片旋转、鼠标滚轮缩放、镜像、切换图片js代码
2020/12/13 Javascript
js事件冒泡、事件捕获和阻止默认事件详解
2016/08/04 Javascript
解决wx.onMenuShareTimeline出现的问题
2016/08/16 Javascript
JavaScript Date 知识浅析
2017/01/29 Javascript
JS实现AES加密并与PHP互通的方法分析
2017/04/19 Javascript
Angular4 中常用的指令入门总结
2017/06/12 Javascript
详解webpack异步加载业务模块
2017/06/23 Javascript
Vue服务器渲染Nuxt学习笔记
2018/01/31 Javascript
angularjs模态框的使用代码实例
2019/12/20 Javascript
逐行分析鸿蒙系统的 JavaScript 框架(推荐)
2020/09/17 Javascript
python 生成不重复的随机数的代码
2011/05/15 Python
python3使用matplotlib绘制散点图
2019/03/19 Python
Python pandas 列转行操作详解(类似hive中explode方法)
2020/05/18 Python
keras之权重初始化方式
2020/05/21 Python
Python 实现键盘鼠标按键模拟
2020/11/18 Python
python爬虫scrapy基于CrawlSpider类的全站数据爬取示例解析
2021/02/20 Python
推荐10个CSS3 制作的创意下拉菜单效果
2014/02/11 HTML / CSS
股东出资证明书范例
2014/10/04 职场文书
离婚起诉状范本
2015/05/19 职场文书
关于教师节的广播稿
2015/08/19 职场文书
面试中canvas绘制图片模糊图片问题处理
2022/03/13 Javascript