风の社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 5180|回复: 0
打印 上一主题 下一主题

[JavaScript] 跨浏览器事件处理

[复制链接]

449

主题

0

听众

1995

积分

管理员

Rank: 9Rank: 9Rank: 9

  • TA的每日心情
    开心
    2012-9-12 10:03
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    楼主
    发表于 2012-9-28 13:00:39 |只看该作者 |倒序浏览
    如果项目中没有使用诸如 jQuery 之类的库,如何方便地为元素绑定事件,并兼容各种浏览器呢?下面这个简单的 Utility 应该可以考虑。

    var eventUtility = {
    	addEvent : function(el, type, fn) {
    		if(typeof addEventListener !== "undefined") {
    			el.addEventListener(type, fn, false);
    		} else if(typeof attachEvent !== "undefined") {
    			el.attachEvent("on" + type, fn);
    		} else {
    			el["on" + type] = fn;
    		}
    	},
    
    	removeEvent : function(el, type, fn) {
    		if(typeof removeEventListener !== "undefined") {
    			el.removeEventListener(type, fn, false);
    		} else if(typeof detachEvent !== "undefined") {
    			el.detachEvent("on" + type, fn);
    		} else {
    			el["on" + type] = null;
    		}
    	},
    
    	getTarget : function(event) {
    		if(typeof event.target !== "undefined") {
    			return event.target;
    		} else {
    			return event.srcElement;
    		}
    	},
    
    	preventDefault : function(event) {
    		if(typeof event.preventDefault !== "undefined") {
    			event.preventDefault();
    		} else {
    			event.returnValue = false;
    		}
    	}
    };


    使用方法示例:

    var eventHandler = function(evt) {
    	var target = eventUtility.getTarget(evt),
    		tagName = target.tagName;
    
    	if(evt.type === "click") {
    		if(tagName === "A" || tagName === "BUTTON") {
    			alert("You clicked on an A element, and the innerHTML is " + target.innerHTML + "!");
    			eventUtility.preventDefault(evt);
    		}
    	} else if(evt.type === "mouseover" && tagName === "A") {
    		alert("mouseovered " + target.innerHTML);
    	}
    	
    };
    
    eventUtility.addEvent(document, "click", eventHandler);
    eventUtility.addEvent(document, "mouseover", eventHandler);
    
    eventUtility.removeEvent(document, "mouseover", eventHandler);
    分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    转播转播0 分享分享0 收藏收藏0 支持支持0 反对反对0
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    Archiver|手机版|迦南的天空 ( 沪ICP备12037486号-1

    GMT+8, 2024-5-19 06:26 , Processed in 0.015459 second(s), 10 queries , Gzip On, Redis On.

    Powered by Discuz! X2.5

    © 2001-2012 Comsenz Inc.

    回顶部