学习要点:
1.问题所在
2.设置代码
本节课,我们主要探讨一下事件绑定,在此之前我们都使用的是传统的事件绑定。这节
点,我们想使用现代绑定对事件进行绑定和删除。
一.问题所在
上一节课,我们用现代事件绑定封装了事件触发和删除,但还有几个问题没有得到解决:
1.无法删除事件;2.无法顺序执行;3.IE 的现代事件绑定存在内存泄漏问题。
我们这节课将尝试着通过使用传统事件绑定对 IE 进行封装。
二.设置代码
//跨浏览器添加事件绑定
function addEvent(obj, type, fn) {
if (typeof obj.addEventListener != 'undefined') {
obj.addEventListener(type, fn, false);
} else {
//创建一个可以保存事件的哈希表(散列表)
if (!obj.events) obj.events = {};
if (!obj.events[type]) {
//创建一个可以保存事件处理函数的数组
obj.events[type] = [];
//存储第一个事件处理函数
if (obj['on' + type]) obj.events[type][0] = fn;
}
//通过事件计数器来从第二个事件处理函数开始
obj.events[type][addEvent.ID++] = fn;
//执行所有事件处理函数
obj['on' + type] = function () {
for (var i in obj.events[type]) {
obj.events[type][i]();
}
}
}
}
//每个事件分配一个 ID 计数器
addEvent.ID = 1;
网友评论