ace 编辑器可防止触发 keydown 事件。我认为它preventDefault
。
如何在执行编辑器事件之前删除此预防或绑定到 keydown 事件?
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){...}})
我还希望能够选择性地过滤光标按键(并在弹出窗口中使用它们而不是它)。我能够使用以下代码注入此功能:
editor.keyBinding.origOnCommandKey = editor.keyBinding.onCommandKey;
editor.keyBinding.onCommandKey = function(e, hashId, keyCode) {
if (...) {
this.origOnCommandKey(e, hashId, keyCode);
}
}
keyCode 38 代表光标向上,keyCode 40 代表向下,13 代表回车。如果不调用原始函数,Ace 将看不到此键按下。不幸的是,Ace 仍然使用返回键。
这可以通过类似的解决方案来防止:
editor.keyBinding.origOnTextInput = editor.keyBinding.onTextInput;
editor.keyBinding.onTextInput = function(text) {
if (...) {
this.origOnTextInput(text);
}
}
在这种情况下,文本是换行符。