Как переопределить действие отмены браузера по умолчанию - PullRequest
0 голосов
/ 01 июля 2018

Я реализовал менеджер отмены. Беда в том, что когда страница содержит текст ввода

<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 голосов
/ 01 июля 2018

Вам нужно слушать событие 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>
...