ace编辑器可防止触发keydown事件。我认为preventDefault
。
如何在执行编辑器事件之前删除此预防或绑定到keydown事件?
答案 0 :(得分:5)
ace仅停止已处理的事件, 你可以使用捕获事件监听器(editor.container.addEventListener(“keydown”,handler,true)) 或使用ace的命令处理程序
更新:阻止ace命令只有时候捕获事件处理程序才会起作用,但有时候ace hashHandler比关键码大转换更好
HashHandler = require("ace/keyboard/hash_handler").HashHandler
var turn = 0
var h = new HashHandler([{
bindKey: "Up",
descr: "Block cursor movement smetimes",
exec: function(ed){
turn++
if (turn % 2)
return false // allow other ace commands to handle event
}
}])
editor.keyBinding.addKeyboardHandler(h)
// editor.keyBinding.removeKeyboardHandler(h)
或更紧凑的形式
var h = new HashHandler()
h.bindKeys({"Up": function(ed){...}})
答案 1 :(得分:3)
我还希望能够按顺序过滤光标键(并在弹出窗口中使用它们而不是它)。我能够使用以下代码注入此功能:
editor.keyBinding.origOnCommandKey = editor.keyBinding.onCommandKey;
editor.keyBinding.onCommandKey = function(e, hashId, keyCode) {
if (...) {
this.origOnCommandKey(e, hashId, keyCode);
}
}
keyCode 38代表向上光标,keyCode 40代表向下,13代表enter。如果未调用原始函数,Ace将不会看到此键按下。不幸的是,返回键仍由Ace使用。
使用类似的解决方案可以防止这种情况:
editor.keyBinding.origOnTextInput = editor.keyBinding.onTextInput;
editor.keyBinding.onTextInput = function(text) {
if (...) {
this.origOnTextInput(text);
}
}
在这种情况下,text是换行符。