IE8ではwindowにkeypressやonclickが設定できない JS
keydown
やclick
はdocument以下のノード・要素に設定する。
追記: イベントのバブリングがわかる人向けの説明。
IE8まではイベントのバブリングがdocumentまでなので、windowに設定してもイベントがキャッチされません。
input.parentNode.parentNode
...とparentNodeをさかのぼっていくと、最後にはdocumentになるのでそこで止まるようです。
document.documentElement.parentNode -> document document.parentNode -> null
しかしFirefoxなどのブラウザではwindowまでイベントがバブリングします。
この互換性を標準化する際に、「windowまでバブリングする」としたのでIE9以上ではwindowに市設定しても問題ありません。
確認用
var doc = document , win = window , addEvent = (win.addEventListener ? function(element, type, func) { element.addEventListener(type, func, false); } : function(element, type, func) { element.attachEvent('on' + type, func); }) addEvent(win, "keydown", hoge) // ie8ではなにも起きない addEvent(doc, "keydown", piyo)