使用jQuery规范化Code​​Mirror OnKeyEvent

时间:2011-05-05 18:48:56

标签: jquery javascript-events event-handling codemirror

我正在使用CodeMirror和jQuery在宠物PoC项目中提供语法突出显示。它一直很棒,直到我意识到CodeMirror似乎正在捕获DOM上的按键事件,以便当我正在键入启用CM的时候停止全局应用程序热键的工作文本区域。

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

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

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

为了试图解决这个问题,我尝试使用CM的onKeyEvent选项,同时尝试将CM的处理程序传递的event对象标准化为jQuery.Event,如下所示:

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

这成功地将keydownkeypress个事件发送到我的hotkey处理程序。

问题是,“规范化的”event对象似乎没有足够的规范化,因为在e.shiftKey范围内引用hotkey之类的微不足道的东西会返回undefined 。 (我确实将e.type正确地称为keydownkeypress,因此我知道我正在传递event个对象。)

我在这里找不到任何导致event缺少属性的内容,或者我只是搞砸了?

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

1 个答案:

答案 0 :(得分:3)

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

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