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