Lydiafly

Coder,Like JS

导航

没事改写的addEvent和removeEvent方法

没事改写的addEvent和removeEvent方法,有不妥的地方望大大们不吝指出。

View Code
1 voidfunction (win) {
2 var _addEvent = win.addEvent, _removeEvent = win.removeEvent,
3 f = { data: {}, key: "__guid__", ele_guid: 1, fun_guid: 1 },
4 addEvent = win.addEvent =function (obj, type, fn) {
5 var d = f.data, k = f.key, k1 = ele_guid(obj), k2 = fn[k], isBind =false;
6 if (isFunction(fn)) { if (!k2) { fn[k] = k2 = f.fun_guid++; } } else { return; }
7 if (!k1) { ele_guid(obj, k1 = f.ele_guid++); }
8 if (!d[k1]) { d[k1] = {}; }
9 if (!d[k1][type]) { d[k1][type] = {}, isBind =true; }
10 if (!d[k1][type][k2]) { d[k1][type][k2] = fn; }
11 if (isBind) { bind(obj, type, fixHandler); }
12 return k2;
13 }, removeEvent = win.removeEvent =function (obj, type, fn) {
14 var d = f.data, k1 = ele_guid(obj), k2 = fn[f.key];
15 if (!isFunction(fn)) { k2 = fn; }
16 if (!d[k1] ||!d[k1][type] ||!d[k1][type][k2]) { return; }
17 delete d[k1][type][k2];
18 };
19 function isFunction(f) { return Object.prototype.toString.call(f) ==="[object Function]"; }
20 function ele_guid(ele, guid) {
21 if (guid) {
22 if (ele.setAttribute) { ele.setAttribute(f.key, guid) } else { ele[f.key] = guid }
23 } else {
24 return ele.getAttribute ? ele.getAttribute(f.key) : ele[f.key];
25 }
26 }
27 function bind(obj, type, fn) {
28 if (obj.addEventListener) {
29 obj.addEventListener(type, fn, false);
30 } elseif (obj.attachEvent) {
31 obj.attachEvent('on'+ type, (function (o) { returnfunction (event) { fn.call(o, event); } })(obj));
32 }
33 }
34 function fixEvent(event) {
35 if (!event.target) { event.target = event.srcElement; }
36 if (!event.stopPropagation) { event.stopPropagation = fixEvent.stopPropagation; }
37 if (!event.preventDefault) { event.preventDefault = fixEvent.preventDefault; }
38 return event;
39 }
40 fixEvent.stopPropagation =function () { this.cancelBubble =true; }
41 fixEvent.preventDefault =function () { this.returnValue =false; }
42 function fixHandler(event) {
43 event = fixEvent(event);
44 var ele = event.target, d = f.data, k1 = ele_guid(ele), handles = d[k1][event.type], fn;
45 for (fn in handles) { if (isFunction(handles[fn])) { handles[fn].call(ele, event); } }
46 }
47 } (window);

posted on 2011-04-18 19:44  lydiafly  阅读(535)  评论(0编辑  收藏  举报