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写的数字拼图小游戏代码[学习参考]
Oct 29 Javascript
Ext grid 添加右击菜单
Nov 26 Javascript
jquery二级导航内容均分的原理及实现
Aug 13 Javascript
javascript 通用loading动画效果实例代码
Jan 14 Javascript
js实现星星打分效果的方法
Jul 05 Javascript
JS实现兼容各浏览器解析XML文档数据的方法
Jun 01 Javascript
React组件之间的通信的实例代码
Jun 27 Javascript
vue实现某元素吸顶或固定位置显示(监听滚动事件)
Dec 13 Javascript
jquery实现两个div中的元素相互拖动的方法分析
Apr 05 jQuery
JS如何实现封装列表右滑动删除收藏按钮
Jul 23 Javascript
vue.js 解决v-model让select默认选中不生效的问题
Jul 28 Javascript
vue添加锚点,实现滚动页面时锚点添加相应的class操作
Aug 10 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插件 HTMLPurifier HTML解析器
2013/07/01 PHP
php 发送带附件邮件示例
2014/01/23 PHP
php判断正常访问和外部访问的示例
2014/02/10 PHP
php实现加减法验证码代码
2014/02/14 PHP
PHP实现取得HTTP请求的原文
2014/08/18 PHP
PHP常用的小程序代码段
2015/11/14 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
jquery submit ie6下失效的原因分析及解决方法
2013/11/15 Javascript
浅谈JavaScript 数据属性和访问器属性
2016/09/01 Javascript
jQuery中 DOM节点操作方法大全
2017/10/12 jQuery
Bootstrap modal只加载一次数据的解决办法(推荐)
2017/11/24 Javascript
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
2018/08/24 Javascript
vue 配置多页面应用的示例代码
2018/10/22 Javascript
vue多个元素的样式选择器问题
2019/11/29 Javascript
js实现浏览器打印功能的示例代码
2020/07/15 Javascript
JS绘图Flot应用图形绘制异常解决方案
2020/10/16 Javascript
[03:43]2014DOTA2西雅图国际邀请赛 newbee战队巡礼
2014/07/07 DOTA
[03:43]TI9战队采访——PSG.LGD
2019/08/22 DOTA
分析python服务器拒绝服务攻击代码
2014/01/16 Python
windows下安装Python和pip终极图文教程
2017/03/05 Python
Python音频操作工具PyAudio上手教程详解
2019/06/26 Python
使用python来调用CAN通讯的DLL实现方法
2019/07/03 Python
python 穷举指定长度的密码例子
2020/04/02 Python
英国工艺品购物网站:Minerva Crafts
2018/01/29 全球购物
Lookfantastic西班牙官网:英国知名美妆购物网站
2018/06/13 全球购物
金融专业推荐信
2013/11/14 职场文书
敬老文明号事迹材料
2014/01/16 职场文书
安全生产专项整治方案
2014/05/06 职场文书
职务说明书范文
2014/05/07 职场文书
2014年最新个人对照检查材料范文
2014/09/25 职场文书
2014年人大工作总结
2014/12/10 职场文书
文明单位创建材料
2014/12/24 职场文书
七年级上册语文教学计划
2015/01/22 职场文书
部门2015年度工作总结
2015/04/29 职场文书
详解Django中 render() 函数的使用方法
2021/04/22 Python
Django集成富文本编辑器summernote的实现步骤
2021/05/31 Python