我实现了一个撤消管理器。 问题是页面包含输入文本时
<script>
$(document).keypress(function(event) {
switch (event.which) {
case 26:
if (event.shiftKey && event.ctrlKey) {
// Ctrl+Shift+z
redo();
}
else if (event.ctrlKey) {
// Ctrl+z
undo();
}
break;
}
})
</script>
<input type="text">
然后,在编辑输入文本时,如果我通过按Ctrl + z触发撤消事件,则输入文本将被撤消,而不会调用我的撤消管理器。
即使页面包含文本字段或文本区域,我也想强制浏览器在Ctrl + z上调用撤消管理器。
答案 0 :(得分:1)
您需要监听keydown
事件,而不是keypress
。浏览器撤消会在按下按键时触发,但是直到将按键抬起才进行按键。此外,如果您不希望浏览器执行自己的撤消操作,则需要使用event.preventDefault()
。
<script>
$(document).keydown(function(event) {
switch (event.which) {
case 90:
if (event.shiftKey && event.ctrlKey) {
// Ctrl+Shift+z
event.preventDefault();
redo();
}
else if (event.ctrlKey) {
// Ctrl+z
event.preventDefault();
undo();
}
break;
}
})
</script>