W
在基于Mozilla的浏览器和Safari中,使用addEventListener()来附加事件回调,使用相应的removeEventListener()来删除。IE提供了类似的函数:attachEvent()和detach- Event()。Mike Foster的xEvent对象(x库的一部分——参见本章“资源”一节)大胆地尝试在这些实现之上使用Façade模式(参见第3章)来提供丰富的跨浏览器事件模型。
这里有一个更深层的跨浏览器问题,用户定义的回调处理函数的调用方式有轻微的差异。在基于Mozilla的浏览器中,函数被调用,收到事件的DOM元素作为上下文对象,就像传统的事件模型一样。在IE中,函数上下文总是Window对象,因此不可能知道当前是哪个DOM元素调用了事件处理函数!甚至当有一个类似于xEvent层的时候,开发者在编写回调处理函数时还需要解决这些差异。
这里提到的最后问题是,没有任何一个实现提供了令人满意的方法来返回所有当前附加的监听器的列表。
因此,我建议不要使用新的事件模型。传统模型的主要缺点——缺少多个监听器的支持——可以通过使用设计模式来解决,我们在下面将要看到。







