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', () => {