Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 拦截CMD+;Z、 CMD+;班次+;Z和CMD+;游猎中的迷幻_Javascript_Safari_Dom Events_Keydown - Fatal编程技术网

Javascript 拦截CMD+;Z、 CMD+;班次+;Z和CMD+;游猎中的迷幻

Javascript 拦截CMD+;Z、 CMD+;班次+;Z和CMD+;游猎中的迷幻,javascript,safari,dom-events,keydown,Javascript,Safari,Dom Events,Keydown,我正在帮助一家公司调试所见即所得编辑器中的撤销/重做功能的一些问题。不幸的是,Safari似乎吞下了CMD+Z键,而且它永远不会到达keydown回调 有没有办法在Javascript中检测这些击键并阻止默认操作?(编辑器有自己的撤消/重做堆栈) 更新 抱歉,我应该说,当浏览器本机撤消堆栈为空时,或者当输入或contenteditable未处于焦点时,我可以拦截CMD+Z。否则它似乎不会被触发或冒泡。我遇到了一个奇怪的情况。我的原始代码并没有阻止事件冒泡: evt.preventDefault(

我正在帮助一家公司调试所见即所得编辑器中的撤销/重做功能的一些问题。不幸的是,Safari似乎吞下了CMD+Z键,而且它永远不会到达keydown回调

有没有办法在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;
    }
}
处理:)

事件。仅preventDefault()
就足以拦截Safari。需要注意的关键是,您必须在
keyup
上执行此操作,而不是在keydown上执行此操作


在Safari中,当您点击CMD-Z时,页面命令会立即运行,例如在按键事件开始之前。

检测,是()。预防,可能不是。我发现这个项目可以捕获cmd+z,并且可以阻止它冒泡:不幸的是,我还不能解释它是如何成功的,所以我可以只提取我需要的一点。我不明白
keyup
发生在
keydown
之后,这会有什么帮助呢?如果有人像我一样浏览过,关键是在测试更改之前关闭浏览器选项卡并重新打开。一定是某种狩猎虫。