diff --git a/src/compiler/codegen/events.js b/src/compiler/codegen/events.js index 4b0776115a0..0a7ca394450 100644 --- a/src/compiler/codegen/events.js +++ b/src/compiler/codegen/events.js @@ -130,12 +130,11 @@ function genHandler (handler: ASTElementHandler | Array): str } } else if (key === 'exact') { const modifiers: ASTModifiers = (handler.modifiers: any) - genModifierCode += genGuard( - ['ctrl', 'shift', 'alt', 'meta'] + const condition = ['ctrl', 'shift', 'alt', 'meta'] .filter(keyModifier => !modifiers[keyModifier]) .map(keyModifier => `$event.${keyModifier}Key`) .join('||') - ) + if (condition) genModifierCode += genGuard(condition) } else { keys.push(key) } diff --git a/test/unit/modules/compiler/codegen.spec.js b/test/unit/modules/compiler/codegen.spec.js index d7faa204944..4add1d06ecb 100644 --- a/test/unit/modules/compiler/codegen.spec.js +++ b/test/unit/modules/compiler/codegen.spec.js @@ -430,6 +430,14 @@ describe('codegen', () => { ) }) + // GitHub Issues #12319 + it('generate events with ctrl shift alt meta exact modifiers are applied together', () => { + assertCodegen( + '', + `with(this){return _c('button',{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 onClick.apply(null, arguments)}}},[_v("Click")])}` + ) + }) + it('generate events with mouse event modifiers', () => { assertCodegen( '',