2013-10-15 58 views
8

我使用不同的文本字段作爲CodeMirror的代理。我想要使​​用諸如closebrackets.js等功能,這些功能通過鍵盤事件激活,如​​,keypresskeyup。我嘗試過幾種不同的方法來觸發這些事件,其中沒有造成CodeMirror收到任何東西:如何在CodeMirror中觸發鍵盤事件?

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

不工作。沒有事件被解僱。

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

我不知道我是否理解你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'事件。我想要觸發這些事件,而無需手動輸入字符。換句話說,我想在CodeMirror上使用JQuery的'$ .Event('keydown',{which:aKeyCode})'函數。 – zakdances

+0

我不想聽這個事件,我想**觸發事件。看看[這個其他SO問題](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',function cm,e){alert(e.keyCode);});'。對不起,我現在看到你的請求**觸發器**。 –

0

我也得到了同樣的痛苦,最後我找到了解決方案。我不知道這是不是很醜,但它對我很有幫助。希望它對你有用。

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

codemirror配備了一個未公開的函數triggerOnKeyDown使用它可以觸發一個關鍵下來codemirror:

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

你應該描述你的解決方案。 – Jess

相關問題