diff --git a/packages/runtime-dom/__tests__/directives/vOn.spec.ts b/packages/runtime-dom/__tests__/directives/vOn.spec.ts index ef7ee346ba8..57c38e9e58d 100644 --- a/packages/runtime-dom/__tests__/directives/vOn.spec.ts +++ b/packages/runtime-dom/__tests__/directives/vOn.spec.ts @@ -163,4 +163,16 @@ describe('runtime-dom: v-on directive', () => { triggerEvent(el2, 'click', e => (e.shiftKey = true)) expect(fn).toBeCalledTimes(2) }) + + it('it should support "enter" and "tab" key modifiers', () => { + const el = document.createElement('input') + const fn = vi.fn() + + const enterHandler = withModifiers(fn, ['enter', 'tab']) + patchEvent(el, 'onKeyup', null, enterHandler, null) + triggerEvent(el, 'keyup', e => (e.key = 'Enter')) + expect(fn).toBeCalledTimes(1) + triggerEvent(el, 'keyup', e => (e.key = 'Tab')) + expect(fn).toBeCalledTimes(2) + }) }) diff --git a/packages/runtime-dom/src/directives/vOn.ts b/packages/runtime-dom/src/directives/vOn.ts index c1a2e182f00..e34765d5a99 100644 --- a/packages/runtime-dom/src/directives/vOn.ts +++ b/packages/runtime-dom/src/directives/vOn.ts @@ -72,7 +72,15 @@ export const withModifiers = < // Kept for 2.x compat. // Note: IE11 compat for `spacebar` and `del` is removed for now. const keyNames: Record< - 'esc' | 'space' | 'up' | 'left' | 'right' | 'down' | 'delete', + | 'esc' + | 'space' + | 'up' + | 'left' + | 'right' + | 'down' + | 'delete' + | 'enter' + | 'tab', string > = { esc: 'escape', @@ -82,6 +90,8 @@ const keyNames: Record< right: 'arrow-right', down: 'arrow-down', delete: 'backspace', + enter: 'enter', + tab: 'tab', } /**