我何时应该在窗口与文档与document.body上观察javascript事件?

bra*_*ahn 23 javascript cross-browser prototypejs dom-events

我正在将prototype.js用于我的网络应用程序,并且我已经在chrome,safari和firefox上运行了所有内容.我现在正致力于IE8的兼容性.

正如我在IE中调试一样,我注意到有一些javascript事件,我以前在窗口上设置了一个观察者,例如

Event.observe(window, eventType, function () {...});
Run Code Online (Sandbox Code Playgroud)

(eventType可能是"dom:loaded","keypress"等等),它在Chrome/Safari/Firefox中运行良好.然而,在IE中,观察者永远不会发射.

至少在某些情况下,我能得到这个被代替放置在比其他一些观察者的IE浏览器window,例如 document(在的情况下"dom:loaded")或document.body(在的情况下"keypress").但是,这都是反复试验.

是否有更系统的方法来确定这些观察者的位置,以便结果将跨浏览器兼容?

谢谢!

bra*_*ahn 34

(这不是一个非常全面的答案,但它似乎在经验上有效 - 所以希望这些经验法则对其他人有帮助.)

  • 通常,注册事件document,而不是window.Webkit和Mozilla浏览器似乎都很满意,但是IE不响应窗口上注册的大多数事件,所以你需要使用documentIE来工作

  • 例外:resize和应该在窗口上设置与加载,卸载和打开/关闭相关的事件.

  • 第一个异常的例外:dom:loaded必须document在IE中设置.

  • 另一个例外:当在启用了find-as-you-type的情况下检测Mozilla下的击键时,将关键事件观察者设置为window,而不是document.如果你使用后者,find-as-you-type似乎会阻止事件.

  • 这个问题有任何更新吗? (2认同)

out*_*tis 1

各种浏览器的对象文档(例如window,MSDN、documentMDC)定义了对象支持哪些事件。你可以从那里开始。

  • 这些文档并没有很好地解释这一点。 (5认同)