我正在使用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));
}
});
这成功地将keydown
andkeypress
事件传递给我的hotkey
处理程序。
问题是,“规范化”event
对象似乎没有足够规范化,因为e.shiftKey
在hotkey
范围内引用了一些微不足道的东西返回undefined
。(我确实得到e.type
了正确的结果keydown
,keypress
所以我知道我正在传递一个event
对象。)
我在这里缺少什么导致我event
缺少属性,还是我只是搞砸了?
我绝对可以加倍返回并访问原始事件属性,但是,嘿,我真的很想能够在几乎任何我需要的地方像下一个人一样使用 jQuery 规范化对象(并且浏览器不可知论只是开始其中)。