7cc@はてなブログ

JavaScriptとかとか

IE8ではwindowにkeypressやonclickが設定できない JS

keydownclickは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)