3

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

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

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

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

为了解决这个问题,我尝试使用 CM 的 onKeyEvent 选项,并尝试通过如下方式规范化eventCM 处理程序传递的对象jQuery.Event

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

这成功地将keydownandkeypress事件传递给我的hotkey处理程序。

问题是,“规范化”event对象似乎没有足够规范化,因为e.shiftKeyhotkey范围内引用了一些微不足道的东西返回undefined。(我确实得到e.type了正确的结果keydownkeypress所以我知道我正在传递一个event对象。)

我在这里缺少什么导致我event缺少属性,还是我只是搞砸了?

我绝对可以加倍返回并访问原始事件属性,但是,嘿,我真的很想能够在几乎任何我需要的地方像下一个人一样使用 jQuery 规范化对象(并且浏览器不可知论只是开始其中)。

4

1 回答 1

3

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

var cm = CodeMirror.fromTextArea(someTextArea, {
    onKeyEvent : function (editor, e) {
        hotkey($.event.fix(e));
    }
});
于 2011-05-19T12:51:18.830 回答