IEマジっすか
window.onloadのハンドラを以下のように書き換えたらIEが衝撃の振る舞いをなさりました。
window.onload = function() { var observed = $("observed"); attachEvent(observed, "keypress", true); attachEvent(observed, "keypress", false); attachEvent(observed, "keydown", true); attachEvent(observed, "keydown", false); attachEvent(observed, "keyup", true); attachEvent(observed, "keyup", false); }
expectedType=keypress actualType=keydown useCapture=false keyCode=65 charCode=undefined which=undefined expectedType=keydown actualType=keydown useCapture=false keyCode=65 charCode=undefined which=undefined expectedType=keydown actualType=keydown useCapture=true keyCode=65 charCode=undefined which=undefined expectedType=keypress actualType=keydown useCapture=true keyCode=65 charCode=undefined which=undefined expectedType=keyup actualType=keyup useCapture=false keyCode=65 charCode=undefined which=undefined expectedType=keyup actualType=keyup useCapture=true keyCode=65 charCode=undefined which=undefined
なんじゃそりゃー!なんでkeypressが先に発生するんじゃー!
って叫んでも仕方ないので前向きに理解に努めよう。IEはおそらくkeypressとkeydownの区別がないのね。だからevent.typeがkeydownのものがkeypressのイベントハンドラに送られたりするのでしょう。推測ですが一応納得。誰か真相を教えてください。