使用javascript捕获ctr-z(撤消)和ctr-y(重做)并执行自定义功能

时间:2011-06-30 15:12:49

标签: javascript firefox google-chrome javascript-events

我一直在为特定目的编写一种在线电子表格应用程序,并且我已经编写了自己的撤消和重做功能。当用户按下ctr-z或ctr-y时,撤消或重做对文本字段的最后更改。他们是一种使用javascript有效地劫持页面上任何地方发生的ctr-z和ctr-y按键事件并使它们运行我自己的函数的方法。或者至少禁用标准浏览器功能。

我需要在Windows上使用最新版本的firefox和chrome。

2 个答案:

答案 0 :(得分:2)

使用jQuery:

$(document).keydown(function (keyEvent) {
   var keyCode = keyEvent.keyCode;
   if (keyEvent.metaKey === true || keyEvent.ctrlKey === true) {
      if (keyCode === 89) {
         //fire your custom redo logic
         keyEvent.preventDefault();
         return false;
      } 
      else if (keyCode === 90) {
         //special case (CTRL-SHIFT-Z) does a redo (on a mac for example)
         if (keyEvent.shiftKey === true) {
            //fire your custom redo logic
         }
         else {
            //fire your custom undo logic
         }
         keyEvent.preventDefault();
         return false;
      }
   } 
});

这应该处理所有基于键盘的事件。如果用户在菜单栏中单击“撤消”或右键单击并选择“撤消”,则无法处理会发生的情况。

答案 1 :(得分:0)

你可以把你的页面隐藏起来textarea,绑定onclick鼠标事件来起作用,这会将焦点设置到textarea,绑定这个textarea的键盘事件,如果一个事件是keydown而key是z或y而modifyer是ctrl - 然后调用重做/撤消操作。