事件处理-用jQuery规范CodeMirror OnKeyEvent



我正在使用CodeMirror和jQuery在宠物PoC项目上提供语法高亮显示。它一直做得很好,直到我意识到CodeMirror似乎以这样一种方式捕获DOM上的按键事件,当我当前在启用cm的文本区输入时,它会阻止全局应用程序热键工作。

为简单起见,我们假设页面上有以下侦听器:

var hotkey = function (e) {
    if (e.shiftKey) { alert('foo'); }
};
$(document).keypress(hotkey);

这将在页面的任何地方工作,除了当我有一个CM文本区域的焦点。

为了尝试解决这个问题,我尝试利用CM的onKeyEvent选项,并尝试规范化event对象,由CM的处理程序与jQuery.Event传递,如下所示:

var cm = CodeMirror.fromTextArea(someTextArea, {
    onKeyEvent : function (editor, event) {
        hotkey($.Event(event));
    }
});

这成功地将keydownkeypress事件转移到我的hotkey处理程序。

问题是,"规范化的"event对象似乎没有被规范化,因为在hotkey范围内引用e.shiftKey这样的小事会返回undefined。(我确实得到e.type正确的keydownkeypress虽然,所以我知道我在传递一个event对象。)

是否有什么我错过了这里,导致我的event有缺失的属性,或者我只是搞砸了?

我当然可以返回并访问原始事件属性,但是,嘿,我真的很希望能够像下一个人一样在我需要的任何地方使用jquery规范化对象(浏览器不可知论只是开始)。

$.Event用于创建自定义事件,即稍后自己触发它们。你想要$.event.fix .

var cm = CodeMirror.fromTextArea(someTextArea, {
    onKeyEvent : function (editor, e) {
        hotkey($.event.fix(e));
    }
});

相关内容

  • 没有找到相关文章

最新更新