Javascript Ace编辑器:为什么要调用键盘事件处理程序两次?
目前,每当在ace编辑器中按下任何键时,我都会通过以下javascript代码捕获键盘事件:Javascript Ace编辑器:为什么要调用键盘事件处理程序两次?,javascript,ace-editor,Javascript,Ace Editor,目前,每当在ace编辑器中按下任何键时,我都会通过以下javascript代码捕获键盘事件: editor.keyBinding.addKeyboardHandler({ handleKeyboard: function(data, hash, keyString, keyCode, event) { console.log(ketString) ... } 问题是每次在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) <-----------
}
this.onCommandKey=函数(e,t,n){
var i=r.keyCodeToString(n);
这是。$callKeyboardHandlers(t,i,n,e)它们使用不同的hashid调用它,并且通常使用不同的键串。第一个调用用于keypress事件,其中hashid是修改器键的组合,如中所示。
第二个是用于带有hashid=-1
的textinput事件的初始化代码是否运行了两次?在代码显示之前断点或console.log
是什么意思?@MichaelGeary好主意!但不幸的是,情况并非如此。我只是在这段代码之前尝试了console.log,它只调用了一次.Aw。调试不是一直都是这样吗?;-)这里有另一个想法给你。首先,确保你使用的是非小型开发版本的Ace和任何其他JavaScript库。现在添加一个console.trace()
call insidehandleKeyboard
。这将在调用函数时打印堆栈跟踪,或者在您的情况下,在您按下一个键时打印两个堆栈跟踪。然后的问题是这些跟踪是否相同或显示两个不同的调用起始位置。如果没有任何东西跳出,请将跟踪粘贴到问题中,依此类推我可能有个主意。好吧,我明白你的意思。但是为什么键盘处理程序会被两次调用,调用的是不同的hashid
s?因为它同时处理kerpes和输入事件。