如何覆盖默认的浏览器撤消操作

时间:2018-07-01 17:33:51

标签: javascript undo

我实现了一个撤消管理器。 问题是页面包含输入文本时

<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上调用撤消管理器。

1 个答案:

答案 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>