Javascript 跨浏览器事件处理

Javascript 跨浏览器事件处理,javascript,events,cross-browser,addeventlistener,attachevent,Javascript,Events,Cross Browser,Addeventlistener,Attachevent,我需要一个跨浏览器的功能来注册事件处理程序和(大部分)一致的处理程序体验。我不需要像jQuery这样的库的全部重量或功能,所以我自己写了。我相信我已经用下面的代码实现了我的目标,到目前为止我的测试已经成功了,但是我已经盯着它看太久了。我的逻辑是否有缺陷,或者我缺少什么 编辑1:为清晰起见,使用浏览器对每个块进行了注释。更新IE块以不立即调用func(感谢) 编辑2:更新IE块,以调用func.call(),使用this而不是elem 编辑3:更新为通过“好零件” 这条线上有个问题: r = el

我需要一个跨浏览器的功能来注册事件处理程序和(大部分)一致的处理程序体验。我不需要像jQuery这样的库的全部重量或功能,所以我自己写了。我相信我已经用下面的代码实现了我的目标,到目前为止我的测试已经成功了,但是我已经盯着它看太久了。我的逻辑是否有缺陷,或者我缺少什么

编辑1:为清晰起见,使用浏览器对每个块进行了注释。更新IE块以不立即调用
func
(感谢)

编辑2:更新IE块,以调用
func.call()
,使用
this
而不是
elem

编辑3:更新为通过“好零件”


这条线上有个问题:

r = elem.attachEvent("on" + evt, func.call(elem, window.event));
这将立即执行func(),而不是将其作为事件的处理程序附加。相反,func()的返回值将分配给事件,如果事件的类型不是
“function”
,则会引发错误

我可以理解您不想使用框架,但许多(许多)其他人已经编写了跨浏览器事件处理代码段。有一个版本,谷歌的“JavaScriptAddEvent”还有很多


jQuery是一个非常轻量级的库。使用它有什么问题?有人已经为你做了所有的工作。或者你只是对学习它不感兴趣?@熊会吃掉你-与此相比,66K+远远不够轻。特别是如果这就是他所需要的@Bill Ayakatubby-所谓“跨浏览器”,你的真正意思是“IE无法正确处理的标准内容”。@Bears:目前,我唯一关心的跨浏览器问题是事件注册,因此我不需要jQuery或其他库。如果我的情况改变,我会重新评估图书馆的必要性。现在最后一个分支已经没有什么意义了。没有不支持
addEventListener
attachEvent
的主要浏览器了。Andy,迁移到感谢您的反馈。我已更新代码以反映您的发现。
r = elem.attachEvent("on" + evt, func.call(elem, window.event));