代码之家  ›  专栏  ›  技术社区  ›  KZcoding Tharun

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

  •  0
  • KZcoding Tharun  · 技术社区  · 8 年前

    目前,每当在ace编辑器中按下任何键时,我都会通过以下javascript代码捕获键盘事件:

    editor.keyBinding.addKeyboardHandler({
        handleKeyboard: function(data, hash, keyString, keyCode, event) {
            console.log(ketString)
            ...
        }
    

    问题是正在调用处理程序函数 两次 每次在ace编辑器中按下一个键,但我希望它被调用一次。有什么想法吗?

    编辑

    根据@MichaelGeary的反馈,我添加了一个控制台。每次调用键盘处理程序时,我都会跟踪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 两者都被触发了?

    1 回复  |  直到 8 年前
        1
  •  1
  •   a user    8 年前

    他们使用不同的hashid调用它,通常使用不同的键串。第一个调用是keypress事件,其中hashid是修改键的组合,如中所示 https://github.com/ajaxorg/ace/blob/55f206452dd2ebd4094edbae7a145bfb09da87bb/lib/ace/keyboard/hash_handler.js#L225 . 第二个用于textinput事件 hashid=-1