2016-10-01 177 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