我正在帮助一家公司在 WYSIWYG 编辑器中调试其撤消/重做功能的一些问题。不幸的是,Safari 似乎吞噬了 CMD+Z 击键,它永远不会进入按键回调。
有没有办法在 Javascript 中检测这些击键并防止默认操作? (编辑器有自己的撤消/重做堆栈)。
更新
抱歉,我应该说当浏览器 native 撤消堆栈为空时,或者当输入或 contenteditable 不在焦点时,我可以拦截 CMD+Z。否则它似乎不会被触发或冒泡。
最佳答案
我有一个奇怪的情况。我的原始代码并没有阻止事件冒泡:
evt.preventDefault();
evt.stopPropagation();
当我添加它并刷新页面时,浏览器仍在拦截击键。
我只是偶然发现,如果我关闭浏览器选项卡并打开一个新的测试页面,浏览器一定重置了一些东西,现在我能够拦截并停止默认的撤消/重做功能:
使用按键事件:
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;
}
}
请客:)
关于javascript - 在Safari中拦截CMD+Z、CMD+SHIFT+Z和CMD+Y,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32957841/