Ace小编:为什么键盘事件处理器被调用了两次?
Ace editor: Why is the keyboard event handler being called twice?
目前,只要在我的 ace 编辑器中按下任何键,我都会通过此 javascript 代码捕获键盘事件:
editor.keyBinding.addKeyboardHandler({
handleKeyboard: function(data, hash, keyString, keyCode, event) {
console.log(ketString)
...
}
问题是每次在 ace 编辑器中按下一个键时,处理函数被调用两次,但我希望它被调用一次。有什么想法吗?
编辑
根据@Michael Geary 的反馈,我在每次调用键盘处理程序时添加了一个 console.trace(),并且我在 ace.js 代码中跟踪了来自两个位置的调用:
this.onCommandKey = function(e, t, n) {
var i = r.keyCodeToString(n);
this.$callKeyboardHandlers(t, i, n, e) <-----------
}
,
this.onTextInput = function(e) {
this.$callKeyboardHandlers(-1, e) <-----------
}
问题是,为什么 onCommandKey
和 onTextInput
都被触发了?
他们用不同的 hashid 调用它,并且通常使用不同的密钥字符串。第一次调用是针对按键事件,其中 hashid 是修饰键的组合,如 https://github.com/ajaxorg/ace/blob/55f206452dd2ebd4094edbae7a145bfb09da87bb/lib/ace/keyboard/hash_handler.js#L225 中所示。
第二个是 hashid=-1
的 textinput 事件
目前,只要在我的 ace 编辑器中按下任何键,我都会通过此 javascript 代码捕获键盘事件:
editor.keyBinding.addKeyboardHandler({
handleKeyboard: function(data, hash, keyString, keyCode, event) {
console.log(ketString)
...
}
问题是每次在 ace 编辑器中按下一个键时,处理函数被调用两次,但我希望它被调用一次。有什么想法吗?
编辑
根据@Michael Geary 的反馈,我在每次调用键盘处理程序时添加了一个 console.trace(),并且我在 ace.js 代码中跟踪了来自两个位置的调用:
this.onCommandKey = function(e, t, n) {
var i = r.keyCodeToString(n);
this.$callKeyboardHandlers(t, i, n, e) <-----------
}
,
this.onTextInput = function(e) {
this.$callKeyboardHandlers(-1, e) <-----------
}
问题是,为什么 onCommandKey
和 onTextInput
都被触发了?
他们用不同的 hashid 调用它,并且通常使用不同的密钥字符串。第一次调用是针对按键事件,其中 hashid 是修饰键的组合,如 https://github.com/ajaxorg/ace/blob/55f206452dd2ebd4094edbae7a145bfb09da87bb/lib/ace/keyboard/hash_handler.js#L225 中所示。
第二个是 hashid=-1