Do not explain, look at the code:
Copy Code code as follows:
;(function () {
Carry out library encapsulation to prevent object contamination
window[' cm ']={};
/**
* Registering events for objects
*/
var addlistener=function (ELEMENT,TYPE,FN) {
if (typeof element = = ' undefined ') return false;
if (Element.addeventlistener) {
Element.addeventlistener (Type,fn,false);
}else if (element.attachevent) {
Buffer event to the label, resolved this point to window (now in FN to point to Element) and remove anonymous event problem
var _eventref= ' _ ' +type+ ' eventref ';
if (!element[_eventref]) {
Element[_eventref]=[];
}
var _eventrefs=element[_eventref];
var index;
For (index in _eventrefs) {
if (_eventrefs[index][' REALFN ']==fn) {
Return
}
}
var nestfn=function () {
Fn.apply (element,arguments);
};
Element[_eventref].push ({' REALFN ': FN, ' nestfn ': Nestfn});
Element.attachevent (' on ' +type,nestfn);
}else{
element[' on ' +type]=fn;
}
};
window[' cm ' [' AddListener ']=addlistener;
/**
* Remove registered events on object
*/
var removelistener=function (ELEMENT,TYPE,FN) {
if (typeof element = = ' undefined ') return false;
if (Element.removeeventlistener) {
Element.removeeventlistener (Type,fn,false);
}else if (element.detachevent) {
var _eventref= ' _ ' +type+ ' eventref ';
if (!element[_eventref]) {
Element[_eventref]=[];
}
var _eventrefs=element[_eventref]
var index;
var nestfn;
For (index in _eventrefs) {
if (_eventrefs[index][' REALFN ']==fn) {
nestfn=_eventrefs[index][' NESTFN '];
if (index==_eventrefs.length-1) {
Element[_eventref]=_eventrefs.slice (0,index);
}else{
Element[_eventref]=_eventrefs.slice (0,index). Concat (_eventrefs.slice (index+1,_eventrefs.length-1));
}
Break
}
}
if (NESTFN) {
Element.detachevent (' on ' +type,nestfn);
}
}else{
element[' on ' +type]=null;
}
};
})();