2016-10-01 90 views
3

我目前正在开发一个Web应用程序,并且遇到问题。 正如你可能知道或不知道的那样,chrome有一个功能,当你按CTRL + Z时,给出<input>(特别是文本输入)的“撤消”功能,用CTRL + Y“重做”它看起来像是一个普通网站的一个很好的功能,但目前我正在制作一个也使用这些键盘快捷键的图像编辑器(CTRL + Z & CTRL + Y)。禁用Chrome的文本输入撤消/重做(CTRL + Z/CTRL + Y)

在我的应用程序中,我也有一个文本输入,所以当我改变文本输入的内容,然后点击CTRL + Z撤消我的图像编辑器中的更改时,它会撤消文本编辑器中的更改!

这里是一个Codepen会发挥效果
(指令在Codepen)

所以在最后我想删除撤销/重做功能在Chrome我该怎么办呢?

回答

0

var ctrlDown = false; 
 
var ctrlKey = 17, vKey = 86, cKey = 67, zKey = 90; 
 

 
document.body.onkeydown = function(e) { 
 
    if (e.keyCode == 17 || e.keyCode == 91) { 
 
    ctrlDown = true; 
 
    } 
 
    if ((ctrlDown && e.keyCode == zKey) || (ctrlDown && e.keyCode == vKey) || (ctrlDown && e.keyCode == cKey)) { 
 
    e.preventDefault(); 
 
    return false; 
 
    } 
 
} 
 
document.body.onkeyup = function(e) { 
 
    if (e.keyCode == 17 || e.keyCode == 91) { 
 
    ctrlDown = false; 
 
    }; 
 
};
<body> 
 
    <input type='text' value='test' /> 
 
</body>

工作的呢?

here盗窃,发现于here作为@KadeHafen的评论。

+1

啊!我之前使用过'e.preventDefault',但它不适用于我..是因为我使用了'keypress'而不是'keydown'? –

+0

@Bintang我认为使用'keypress'可能是你的问题,因为如果我在我的答案中改变它,它似乎不起作用。 – StardustGogeta

1

你可以使用onkeydown事件,并preventDefault ..例如。

document.onkeydown = function(e) { 
    if (e.ctrlKey && e.key === 'z') { 
    e.preventDefault(); 
    alert("CTRL + Z!"); 
    } 
} 
+1

是的,我喜欢这个,它适用于IE11和Chrome。 :)但是,撤消在IE11和Chrome的上下文菜单中仍然可用,因此还需要额外的工作来禁用它:(我做到了这一点:\t \t \t if(e.ctrlKey && e.key === 'Z'){ \t \t \t \t返回假; \t \t \t} – Zeek