キーイベント追加

var KeyBind = {};
    KeyBind.add = function(elm, key, func) {
        var keycode;
        var m = null;
        var sp = {
            "Up" : 38,
            "Down" : 40,
            "Right" : 39,
            "Left" : 37
        }
        if(key) {
            key.replace(/^(([CSA])-)?(\w+)$/, function($0, $1, $2, $3) {
                if($2) {
                    m = ({
                        C : "ctrl",
                        S : "shift",
                        A : "alt"
                    })[$2] + "Key";
                }
                keycode = sp[$3] || $3.toUpperCase().charCodeAt(0);
            });
            elm.addEventListener('keydown', function(evt) {
                if(m) {
                    if(evt[m] && evt.keyCode == keycode) {
                        func(evt);
                    }
                } else {
                    if(evt.keyCode == keycode) {
                        func(evt);
                    }
                }
            }, false);
        } else {
            elm.addEventListener('keydown', func, false);
        }
    }

使いかた

KeyBind.add(window, "C-r", function(evt) {
    alert("hoge")
});

説明

第一引数: 追加したい要素
第二引数: キーバインド C-: Ctrl+, S-: Shift+, A-: Alt+。ふたつ以上の組み合わせは不可。記号に対応していない。 すべてのキーにあたえたい場合 null or false
第三引数; 実行したい関数