Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ace编辑器:为什么要调用键盘事件处理程序两次?_Javascript_Ace Editor - Fatal编程技术网

Javascript Ace编辑器:为什么要调用键盘事件处理程序两次?

Javascript Ace编辑器:为什么要调用键盘事件处理程序两次?,javascript,ace-editor,Javascript,Ace Editor,目前,每当在ace编辑器中按下任何键时,我都会通过以下javascript代码捕获键盘事件: editor.keyBinding.addKeyboardHandler({ handleKeyboard: function(data, hash, keyString, keyCode, event) { console.log(ketString) ... } 问题是每次在ace编辑器中按下一个键时,处理函数都会被调用两次,但我希望调用一次。有什么

目前,每当在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)           <-----------
}
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 inside
handleKeyboard
。这将在调用函数时打印堆栈跟踪,或者在您的情况下,在您按下一个键时打印两个堆栈跟踪。然后的问题是这些跟踪是否相同或显示两个不同的调用起始位置。如果没有任何东西跳出,请将跟踪粘贴到问题中,依此类推我可能有个主意。好吧,我明白你的意思。但是为什么键盘处理程序会被两次调用,调用的是不同的
hashid
s?因为它同时处理kerpes和输入事件。