代码分享之js事件处理
2010年8月7日
1 条评论
此方法提供跨浏览器的事件操作。
提供的API有addEvent、removeEvent、getEvent等。具体的见代码:
var util=util || {}; util.Event = (function(){ var sUserAgent = navigator.userAgent; var fAppVersion = parseFloat(navigator.appVersion); var isOpera = sUserAgent.indexOf("Opera") > -1; var isMinOpera4 = isMinOpera5 = isMinOpera6 = isMinOpera7 = isMinOpera7_5 = false; var isIE = sUserAgent.indexOf("compatible") > -1 && sUserAgent.indexOf("MSIE") > -1 && !isOpera; var isWin = (navigator.platform == "Win32") || (navigator.platform == "Windows"); return { //获得事件对象,比如util.Event.addEvent(dom,'click',function(){var e=util.Event.getEvent();}) getEvent: function(){ if (window.event) { return util.Event.formatEvent(window.event); } else { return util.Event.getEvent.caller.arguments[0];//调用此方法的函数的第一个参数 } }, //获得时间的target,也就是事件的发生地,返回dom对象 getTarget: function(e) { return e.target || e.srcElement; }, //阻止冒泡,比如一个div里面嵌套了一个a,这两个标签都绑定了click事件,如果你想点击a标签的时候并不想执行div上面的click时间。可以用这个方法阻止 stopPropagation: function(e) { if (e.stopPropagation) { e.stopPropagation(); } else { e.cancelBubble = true; } }, //阻止默认行为,比如一个a标签绑定一个click事件,如果你想阻止执行此事件之后并不做跳转,可以用这个方法 preventDefault: function(e) { if (e.preventDefault) { e.preventDefault(); } else { e.returnValue = false; } }, //阻止冒泡或者捕捉和阻止默认行为 stopEvent: function(e) { this.stopPropagation(e); this.preventDefault(e); }, //增加一个事件 util.Event.addEvent(window,'load',function(){}) addEvent:function (oTarget, sEventType, fnHandler) { if (oTarget.addEventListener) { oTarget.addEventListener(sEventType, fnHandler, false); } else if (oTarget.attachEvent) { oTarget.attachEvent("on" + sEventType, fnHandler); } else { oTarget["on" + sEventType] = fnHandler; } }, //取消莫事件的绑定的某个函数 removeEvent:function (oTarget, sEventType, fnHandler) { if (oTarget.removeEventListener) { oTarget.removeEventListener(sEventType, fnHandler, false); } else if (oTarget.detachEvent) { oTarget.detachEvent("on" + sEventType, fnHandler); } else { oTarget["on" + sEventType] = null; } }, //格式化事件对象 formatEvent:function (oEvent) { if (isIE && isWin) { oEvent.charCode = (oEvent.type == "keypress") ? oEvent.keyCode : 0; oEvent.eventPhase = 2; oEvent.isChar = (oEvent.charCode > 0); oEvent.pageX = oEvent.clientX + document.body.scrollLeft; oEvent.pageY = oEvent.clientY + document.body.scrollTop; oEvent.preventDefault = function () { this.returnValue = false; }; if (oEvent.type == "mouseout") { oEvent.relatedTarget = oEvent.toElement; } else if (oEvent.type == "mouseover") { oEvent.relatedTarget = oEvent.fromElement; } oEvent.stopPropagation = function () { this.cancelBubble = true; }; oEvent.target = oEvent.srcElement; oEvent.time = (new Date).getTime(); } return oEvent; } }; })();