使用jQuery规范化CodeMirror 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)); } });
这成功地将keydown
和keypress
事件传递给我的hotkey
处理程序。
问题是,“规范化” event
对象似乎没有足够的规范化,因为在hotkey
范围中引用一些微不足道的东西会返回undefined
返回e.shiftKey
。 (我确实正确地将e.type
作为keydown
或e.type
获得,所以我知道我正在传递一个event
对象。)
在这里我有什么东西可以导致我的event
缺少属性,或者我只是搞砸了?
我当然可以加倍回访并访问原始事件属性,但是,嘿,我真的很想能够像我所需要的那样,使用jQuery规范化对象和下一个人(并且浏览器不可知论只是一个开始)它)。
$.Event
用于创建自定义事件,即稍后自行触发它们。 你想要$.event.fix
。
var cm = CodeMirror.fromTextArea(someTextArea, { onKeyEvent : function (editor, e) { hotkey($.event.fix(e)); } });