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

时间:2010-04-16 19:24:49

标签: javascript javascript-events cross-browser prototypejs

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

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

Event.observe(window, eventType, function () {...});

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

至少在某些情况下,我可以通过将观察者放在除window之外的其他内容上来实现此操作。 document(在"dom:loaded")或document.body(在"keypress"的情况下)。{{1}}。但是,这都是反复试验。

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

谢谢!

2 个答案:

答案 0 :(得分:32)

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

  • 通常,在document上注册活动,而不是window。 Webkit和Mozilla浏览器似乎都很满意,但是IE不响应窗口上注册的大多数事件,因此您需要使用document来使用IE

  • 异常:resize,并且应该在窗口上设置与加载,卸载和打开/关闭相关的事件。

  • 第一个例外的例外情况:必须在IE中的dom:loaded设置document

  • 另一个例外:在Mozilla下检测按键并启用了find-as-type-type时,请在window上设置关键事件观察者,而不是document。如果你选择后者,那么find-as-you-type似乎阻止了这个事件。

答案 1 :(得分:1)

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