diff --git a/src/compiler/codegen/events.ts b/src/compiler/codegen/events.ts index 5ee53e54b17..69947d64cde 100644 --- a/src/compiler/codegen/events.ts +++ b/src/compiler/codegen/events.ts @@ -114,12 +114,13 @@ function genHandler( } } else if (key === 'exact') { const modifiers = handler.modifiers - genModifierCode += genGuard( - ['ctrl', 'shift', 'alt', 'meta'] - .filter(keyModifier => !modifiers[keyModifier]) - .map(keyModifier => `$event.${keyModifier}Key`) - .join('||') - ) + const exactModifiers = ['ctrl', 'shift', 'alt', 'meta'] + .filter(keyModifier => !modifiers[keyModifier]) + .map(keyModifier => `$event.${keyModifier}Key`) + .join('||') + if (exactModifiers) { + genModifierCode += genGuard(exactModifiers) + } } else { keys.push(key) } diff --git a/test/unit/modules/compiler/codegen.spec.ts b/test/unit/modules/compiler/codegen.spec.ts index aab2505f254..bd8e019f45f 100644 --- a/test/unit/modules/compiler/codegen.spec.ts +++ b/test/unit/modules/compiler/codegen.spec.ts @@ -455,6 +455,11 @@ describe('codegen', () => { '', `with(this){return _c('input',{on:{"click":function($event){if(!$event.ctrlKey)return null;if($event.shiftKey||$event.altKey||$event.metaKey)return null;return onClick.apply(null, arguments)}}})}` ) + // #12319: all system modifiers with .exact should not generate syntax error + assertCodegen( + '', + `with(this){return _c('input',{on:{"keydown":function($event){if(!$event.ctrlKey)return null;if(!$event.shiftKey)return null;if(!$event.altKey)return null;if(!$event.metaKey)return null;return onKeydown.apply(null, arguments)}}})}` + ) }) it('generate events with multiple modifiers', () => {