对于非IE浏览器来说,利用现代事件绑定非常方便,但是对于IE浏览器,它自身提供了专门的现代事件绑定方法,但是IE的现代事件绑定方法问题多多,而且还会导致内存泄露,所以本篇文章就是利用传统事件绑定来模拟W3C的现代事件绑定方法。直接开代码,注释非常清楚:
1 function addEvent(obj, type, fn) { 2 if (typeof window.addEventListener != 'undefined') { 3 obj.addEventListener(type, fn, false); 4 } else { 5 //定义一个哈希表来存放事件对象 6 obj.events = obj.events || {}; 7 8 //将事件函数存放在事件对象的数组中 9 if (!obj.events[type]) { 10 obj.events[type] = []; 11 //将第一个事件函数存放在事件对象数组中的第一个位置上 12 if (obj['on' + type]) obj.events[type][0] = fn; 13 } 14 //将后面的事件函数依次存放在事件对象数组中的其他位置 15 obj.events[type][addEvent.ID++] = fn; 16 //执行事件函数 17 obj['on' + type] = function () { 18 for (var i in obj.events[type]) { 19 obj.events[type][i](); 20 } 21 }; 22 } 23 } 24 //为每个事件分配一个计数器 25 addEvent.ID = 1;