我正在帮助公司在所见即所得编辑器中调试其撤消/重做功能的一些问题。不幸的是,Safari似乎吞噬了[[CMD + Z击键,并且它从未进入击键回调。
是否有一种方法可以检测Javascript中的这些击键并阻止默认操作? (编辑器具有自己的撤消/重做堆栈)。更新
抱歉,我应该说,当浏览器的本地撤消堆栈为空,或者输入或contenteditable不在焦点时,我可以拦截CMD
+ Z。否则,它似乎不会被触发或冒泡。evt.preventDefault();
evt.stopPropagation();
当我添加此内容并刷新页面时,浏览器仍在拦截按键。只是偶然地发现,如果我关闭浏览器选项卡并在测试页上打开一个新选项,则浏览器必须重置了某些内容,现在我能够拦截并停止默认的撤消/重做功能:使用keydown事件:
if (evt.metaKey || evt.ctrlKey) { switch (evt.which) { case 89: // redo, CMD+Y evt.preventDefault(); evt.stopPropagation(); // Do your Redo stuff break; case 90: if (evt.shiftKey) { // redo, CMD+SHIFT+Z evt.preventDefault(); evt.stopPropagation(); // Do your Redo stuff } else { // undo, CMD+Z evt.preventDefault(); evt.stopPropagation(); // Do your Undo stuff } break; } }
请客:)
event.preventDefault()
仅足以拦截Safari。需要注意的关键是您必须在keyup
上执行此操作,而不是按下键盘。在Safari中,当您按下CMD-Z时,page命令将立即运行,例如甚至在按键事件开始之前。