diff --git a/src/compiler/codegen/events.js b/src/compiler/codegen/events.js index 79c79404662..fb1bcb960b1 100644 --- a/src/compiler/codegen/events.js +++ b/src/compiler/codegen/events.js @@ -18,7 +18,11 @@ const keyCodes = { const modifierCode = { stop: '$event.stopPropagation();', prevent: '$event.preventDefault();', - self: 'if($event.target !== $event.currentTarget)return;' + self: 'if($event.target !== $event.currentTarget)return;', + ctrl: 'if(!$event.ctrlKey)return;', + shift: 'if(!$event.shiftKey)return;', + alt: 'if(!$event.altKey)return;', + meta: 'if(!$event.metaKey)return;' } export function genHandlers (events: ASTElementHandlers, native?: boolean): string { diff --git a/test/unit/modules/compiler/codegen.spec.js b/test/unit/modules/compiler/codegen.spec.js index 99359f5eb63..10c8d2061be 100644 --- a/test/unit/modules/compiler/codegen.spec.js +++ b/test/unit/modules/compiler/codegen.spec.js @@ -221,6 +221,22 @@ describe('codegen', () => { '', `with(this){return _h('input',{on:{"input":function($event){if($event.target !== $event.currentTarget)return;onInput($event)}}})}` ) + assertCodegen( + '', + `with(this){return _h('input',{on:{"input":function($event){if(!$event.ctrlKey)return;onInput($event)}}})}` + ) + assertCodegen( + '', + `with(this){return _h('input',{on:{"input":function($event){if(!$event.shiftKey)return;onInput($event)}}})}` + ) + assertCodegen( + '', + `with(this){return _h('input',{on:{"input":function($event){if(!$event.altKey)return;onInput($event)}}})}` + ) + assertCodegen( + '', + `with(this){return _h('input',{on:{"input":function($event){if(!$event.metaKey)return;onInput($event)}}})}` + ) }) it('generate events with multiple modifers', () => {