使用jQuery规范化Code​​Mirror OnKeyEvent

我正在使用CodeMirror和jQuery在宠物PoC项目上提供语法高亮。 它一直很好,直到我意识到CodeMirror似乎正在捕获DOM上的按键事件,这样当我正在键入一个支持CM的textarea时,它会阻止全局应用程序热键工作。

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

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

这可以在页面的任何地方使用,除非我有焦点的CM textarea。

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

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

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

问题是,“规范化” event对象似乎没有足够的规范化,因为在hotkey范围中引用一些微不足道的东西会返回undefined返回e.shiftKey 。 (我确实正确地将e.type作为keydowne.type获得,所以我知道我正在传递一个event对象。)

在这里我有什么东西可以导致我的event缺少属性,或者我只是搞砸了?

我当然可以加倍回访并访问原始事件属性,但是,嘿,我真的很想能够像我所需要的那样,使用jQuery规范化对象和下一个人(并且浏览器不可知论只是一个开始)它)。

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

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