如何覆盖默认浏览器撤消操作
How to override default browser undo action
我实现了一个撤销管理器。
问题是页面包含输入文本
<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 上调用我的撤消管理器,即使页面包含文本字段或文本区域。
您需要监听 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>
我实现了一个撤销管理器。 问题是页面包含输入文本
<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 上调用我的撤消管理器,即使页面包含文本字段或文本区域。
您需要监听 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>