没事改写的addEvent和removeEvent方法,有不妥的地方望大大们不吝指出。
View Code
1
void
function
(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 } else if (obj.attachEvent) {
31 obj.attachEvent( ' on ' + type, ( function (o) { return function (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);
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 } else if (obj.attachEvent) {
31 obj.attachEvent( ' on ' + type, ( function (o) { return function (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);