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のイベントハンドラに送られたりするのでしょう。推測ですが一応納得。誰か真相を教えてください。