2013-10-15 27 views
8

私はCodeMirrorのプロキシとして別のテキストフィールドを使用しています。 などの機能を使用して、​​、keypress、およびkeyupなどのキーボードイベントを使用して有効にしたいと考えています。CodeMirrorでどのようにキーボードイベントをトリガーできますか?

kc = 219 
e = $.Event 'keydown', { which: kc } 
$(myCodeMirror.getInputField()).trigger e 

が動作しない:私は何かを受け取るためにCodeMirrorを引き起こしたどれもこれらのイベントをトリガするには、いくつかの異なるアプローチを、試してみました。イベントは発生しません。

cmIF = $(myCodeMirror.getInputField()) 

textArea = $('<textarea></textArea>') 
$('body').append textArea 
textArea.keydown (e) -> 
    cmIF.focus() 
    return 

kc = 219 
e = $.Event 'keydown', { which: kc } 
textArea.trigger e 

別のテキスト領域からイベントを転送しようとしています。動作しません。 CMはイベントがトリガされない。

$(myCodeMirror.getWrapperElement()).children().each (index) -> 
    $(this).trigger e 
    return 

CMsラッパーのすべての子でイベントをトリガーしようとしました。動作しません。 CMイベントは発生しませんでした。

私はここで間違っていますか? CodeMirrorインスタンスでキーボードイベントをトリガーするにはどうすればよいですか?

答えて

6

codemirrorインスタンスの設定オプションを定義しているときに100%理解していますが、現在はキーボードイベントを定義しています。

var cmInstance = CodeMirror(target, { 
    value: myTextArea.value, 
    //other options here perhaps 

    //defining some keyboard shortcuts 
    extraKeys: { 
     "Ctrl-J": "toMatchingTag", 
     "Ctrl-S": function(cm) { 
      saveCode(cm); //function called when 'ctrl+s' is used when instance is in focus 
     }, 
     "F11": function(cm) { 
      toggleFullscreen(cm,true); //function called for full screen mode 
     }, 
     "Esc": function(cm) { 
      toggleFullscreen(cm,false); //function to escape full screen mode 
     } 
    } 
}); 

これらの機能は、codemirrorインスタンスにフォーカスが当てられている場合にのみ発生します。その後、あなたの機能で好きなことをすることができます。新しいリスナーを追加して、どのようなイベントが発生したかを知ることさえできます(?)。

こちらがお役に立てば幸いです。

+1

あなたは正しい軌道に乗っているが、私は、任意のキーイベントを発生したいだけではなく、ショートカット。たとえば、CodeMirrorは、文字または数字を入力するときにonkeydownイベントを発生させます。手動で文字を入力しなくても、これらのイベントをトリガーしたいです。言い換えれば、私はJQueryの '$ .Event( 'keydown'、{which:aKeyCode})'関数をCodeMirrorで使用したいと思います。 – zakdances

+0

私はイベントを聞きたくありません、私は**イベントをトリガーしたいです**。 [この他の質問](http://stackoverflow.com/questions/832059/definitive-way-to-trigger-keypress-events-with-jquery)と[JQueryトリガのドキュメント](http:// api .jquery.com/trigger /)を参照してください。 – zakdances

+0

イニシャライズ後にcmインスタンスにイベントリスナーを追加することができます。Initiate: 'var cm = CodeMirror(target、{value:value});'次に 'cm.on( 'keydown' cm、e){アラート(e.keyCode);}); '。申し訳ありません**あなたのリクエストは**トリガー**です。 –

0

私も同じ痛みを覚えましたが、私は解決策を見つけました。私はこれが醜いハックかどうかはわかりませんが、それは私の仕事です。それがあなたに作用することを願っています。

myCodeMirror.options.extraKeys.F11(); //trigger F11 assigned function 
myCodeMirror.options.extraKeys.["Ctrl-S"](); //trigger Ctrl-S assigned function 
0

codemirrorあなたはcodemirrorにダウンキーをトリガすることが可能な文書化されていない機能triggerOnKeyDownが付属しています:

const ev = { 
    type: 'keydown', 
    keyCode: 40 // the keycode for the down arrow key, use any keycode here 
} 
cm.triggerOnKeyDown(ev) 
+0

解決策を説明する必要があります。 – Jess

関連する問題