目前,我正在通过此javascript代码在我的ace编辑器中按下任何键时捕获键盘事件:
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
都被触发了?
答案 0 :(得分:1)
他们用不同的hashid调用它,并且通常使用不同的键串。第一个调用是keypress事件,其中hashid是https://github.com/ajaxorg/ace/blob/55f206452dd2ebd4094edbae7a145bfb09da87bb/lib/ace/keyboard/hash_handler.js#L225中所见的修饰键的组合。
第二个是带有hashid=-1