3

私はCodeMirrorを jQuery と共に使用して、ペットの PoC プロジェクトで構文の強調表示を提供しています。CM 対応のテキストエリアに現在入力しているときに、CodeMirror がグローバルアプリケーションのホットキーの動作を停止するような方法で DOM 上のキー プレス イベントをキャプチャしているように見えることに気付くまでは、うまくいっています。

簡単にするために、ページに次のリスナーがあると仮定しましょう。

var hotkey = function (e) {
    if (e.shiftKey) { alert('foo'); }
};
$(document).keypress(hotkey);

これは、CM テキストエリアにフォーカスがある場合を除いて、ページのどこでも機能します。

eventこれを回避するために、CM の onKeyEvent オプションを利用して、CM のハンドラによって渡されるオブジェクトを次のように正規化しようとしましjQuery.Eventた。

var cm = CodeMirror.fromTextArea(someTextArea, {
    onKeyEvent : function (editor, event) {
        hotkey($.Event(event));
    }
});

keydownこれにより、およびkeypressイベントがhotkeyハンドラーに正常に渡されます。

問題は、「正規化された」eventオブジェクトが十分に正規化されていないように見えることです。スコープ内e.shiftKeyのような些細なことを参照すると が返されます。(どちらかまたはどちらかとして正しく取得するので、オブジェクトを渡していることがわかります。)hotkeyundefinede.typekeydownkeypressevent

ここで欠けているものがあり、プロパティが欠落している原因にeventなっていますか、それとも単に失敗しているだけですか?

間違いなく元に戻して生のイベント プロパティにアクセスすることもできますが、必要なほぼすべての場所で、jQuery で正規化されたオブジェクトを次の人と同じように利用できるようになりたいと思っています (ブラウザに依存しないことはほんの始まりにすぎません)。それの)。

4

1 に答える 1

3

$.Eventカスタムイベントを作成するためのものです。つまり、後で独自にトリガーするためのものです。あなたがしたい$.event.fix

var cm = CodeMirror.fromTextArea(someTextArea, {
    onKeyEvent : function (editor, e) {
        hotkey($.event.fix(e));
    }
});
于 2011-05-19T12:51:18.830 に答える