2017-02-23 111 views
0

這個問題上來後,我實現了王牌編輯器...如何防止瀏覽器覆蓋ace編輯器的keyBindings?

這裏是鏈接爲:THX for循環

Ace editor, how to remove all keyBindings but one?

我有王牌編輯,:

for (key in editor.keyBinding.$defaultHandler.commandKeyBinding) { 
      if (key !== "ctrl-d") 
       delete editor.keyBinding.$defaultHandler.commandKeyBinding[key]; 
     } 

我有我自己的鍵綁定,以及王牌編輯器有它自己的,巫婆我刪除所有,但一個,那一個是CTRL + d刪除線...

但是,我的瀏覽器已經在書籤上的ctrl-d的東西,我現在需要防止這一點,任何想法?

+0

你好,我是無法重現的問題,王牌編輯似乎防止默認動作(添加至收藏)默認情況下。 和你使用的是不影響ACE-編輯原生功能,因此它應該工作,因爲它是解決方案。 –

+0

我有同樣的問題,但通過在我的回調中返回「true」或沒有任何內容(沒有「return」關鍵字)解決。當我返回「假」時,事件似乎沒有阻止...... –

回答

1

我在ace編輯器和默認函數中測試似乎會自行阻止默認鍵盤快捷鍵。但回答你的問題的原因,你可以使用一個事件偵聽器ctrl + dcommand + d不是使用e.preventDefault()e.stopPropagation() ...現在你會怎麼用王牌編輯器中使用:

document.addEventListener("keydown", function(e) { 
    if (e.key.toLowerCase() == "d" && (navigator.platform.match("Mac") ? e.metaKey : e.ctrlKey)) { 
     editor.execCommand("removeline"); 
     e.preventDefault(); 
     e.stopPropagation(); 
    } 
}, false); 
  • 通知如何我用e.key.toLowerCase() == "d"而不是e.keyCode == 68 ...這是因爲KeyboardEvent.keyCode現在標記爲已棄用所以我用KeyboardEvent.key來代替。使用.toLowerCase()即使在大寫鎖定切換時也能快捷地工作。使用e.key代替e.keyCode
  • 一個缺點是,e.key將只使用英文/拉丁鍵盤輸入工作,所以關鍵必須是字面意思是「d」,而e.keyCode將與其他語言的輸入工作,如阿拉伯語,例如(CTRL +ي)。 ..所以你決定使用哪一個。

,如果你已經刪除默認綁定/命令通緝命令mentioned here您可以添加它沒有這樣的鍵綁定:

editor.commands.addCommand({ 
    name: "removeline", 
    exec: function(editor) { editor.removeLines(); }, 
    scrollIntoView: "cursor", 
    multiSelectAction: "forEachLine" 
}); 
  • 它neccsarry這個命令存在,因此editor.execCommand("removeline")會重新工作