2010-11-24 81 views
0

我发现了一些有趣的JavaScript撤销管理器和 - 当然,我们有一个最终将在浏览器中使用HTML5实现的。撤消/重做事件绑定

现在,我不知道的是如何捕捉意味着触发 '撤消' 与jQuery驱动的UndoManager用户操作:

  • 按Ctrl + Z,按Ctrl + Shift + Z
  • CMD + Z,为Cmd + Shift + Z
  • 用户点击编辑>撤消编辑>在浏览器中重做菜单

我首先它会是这样的:

function keypress(e){ 
    if (e.metaKey) { 
    Collage.console(e); 
    switch(e.keyCode){ 
    case 122: // Mac 
     if (e.shiftKey) { 
     undoManager.redo(e); 
     } else { 
     undoManager.undo(e); 
     } 
    case 26: // PC 
     if (e.shiftKey) { 
     undoManager.redo(e); 
     } else { 
     undoManager.undo(e); 
     } 
    } 
    } 
}; 

$('#my-thing-with-undos').bind('keypress', keypress); 

但我如何确保(现代)浏览器的编辑菜单跟上程序?

我真的不希望浏览器试图找出在该区域中撤消什么以及如何撤消,或者至少不要执行编辑(它是一个contenteditable = true区域)。

回答

0

我不认为你可以触发默认浏览器事件...

考虑到这一点使用array存储以往按键的特定时间。例如

如果我在一秒钟内输入“hello world”,或者如果我继续打字,请继续录制字符。当用户停止输入超过一秒钟时,然后将其推到一个数组,以便更好地控制更改。

另一件事是,这是一种不好的感觉。但确保26和122不代表ctrl + z最有可能是它自己或控制。

+0

`第2行if(e.metaKey)`应确保控制或命令关闭。 – ilpoldo 2010-11-24 19:14:09