在CodeMirror中使用keyup而不是keypress进行高级键映射

时间:2014-09-09 07:20:42

标签: javascript codemirror

CodeMirror有很多方法可以改变和定义键绑定,但我没有找到改变单个键的方法,因此它的事件在keyup而不是keypress上被触发。

我正在寻找的是以下场景:

我的tab键将是键盘快捷键的修饰键,例如我可以tab+q,而我知道如何在CodeMirror中附加事件,以便在命中该组合时触发(事件keyHandled),我在努力改变按键时的默认行为。

  1. 对于每个键,tab我希望keypress被解雇
  2. 按住tab时,不会发生任何事情
  3. tab和一个定义的键被命中并保持时(例如tab+q),该绑定的事件应该触发 - 但只有一次,到目前为止,即使我设法捕获{{1事件并按住键,它只会多次触发事件
  4. 如果点击并释放tab,则应插入标签字符
  5. 有关如何处理此问题的任何想法?除了攻击CodeMirror本身以外还有什么?

    JSFiddle的例子很棒。

1 个答案:

答案 0 :(得分:2)

使用内置的键盘映射系统无法做到这一点,因为它被定义为仅使用标准修饰键(shift,ctrl,alt,meta)。

但是您可以自己跟踪Tab的位置,并添加一些额外的键绑定,这些绑定仅在选项卡关闭时生效。这并不完美(如果在您的文档没有焦点时按下或释放标签,则您不会注意到)。有关示例,请参阅http://jsbin.com/ihunin/428/。返回CodeMirror.Pass是密钥处理程序指示它什么也不做的一种方式,而密钥的其他处理程序可以转一圈。