diff --git a/packages/runtime-dom/__tests__/directives/vOn.spec.ts b/packages/runtime-dom/__tests__/directives/vOn.spec.ts index fda9d6c03..a9d327133 100644 --- a/packages/runtime-dom/__tests__/directives/vOn.spec.ts +++ b/packages/runtime-dom/__tests__/directives/vOn.spec.ts @@ -44,20 +44,32 @@ describe('runtime-dom: v-on directive', () => { const el = document.createElement('div') const fn = jest.fn() //
- const nextValue = withKeys(withModifiers(fn, ['ctrl']), ['esc']) + const nextValue = withKeys(withModifiers(fn, ['ctrl']), [ + 'esc', + 'arrow-left' + ]) patchEvent(el, 'keyup', null, nextValue, null) + triggerEvent(el, 'keyup', e => (e.key = 'a')) expect(fn).not.toBeCalled() + triggerEvent(el, 'keyup', e => { e.ctrlKey = false e.key = 'esc' }) expect(fn).not.toBeCalled() + triggerEvent(el, 'keyup', e => { e.ctrlKey = true e.key = 'Escape' }) - expect(fn).toBeCalled() + expect(fn).toBeCalledTimes(1) + + triggerEvent(el, 'keyup', e => { + e.ctrlKey = true + e.key = 'ArrowLeft' + }) + expect(fn).toBeCalledTimes(2) }) test('it should support "exact" modifier', () => { diff --git a/packages/runtime-dom/src/directives/vOn.ts b/packages/runtime-dom/src/directives/vOn.ts index b8b91d481..f2f11622d 100644 --- a/packages/runtime-dom/src/directives/vOn.ts +++ b/packages/runtime-dom/src/directives/vOn.ts @@ -1,3 +1,5 @@ +import { hyphenate } from '@vue/shared' + const systemModifiers = ['ctrl', 'shift', 'alt', 'meta'] type KeyedEvent = KeyboardEvent | MouseEvent | TouchEvent @@ -35,17 +37,17 @@ export const withModifiers = (fn: Function, modifiers: string[]) => { const keyNames: Record