diff --git a/src/compiler/codegen/events.js b/src/compiler/codegen/events.js
index 9b0c143e9d9..26dc1cf9c80 100644
--- a/src/compiler/codegen/events.js
+++ b/src/compiler/codegen/events.js
@@ -29,9 +29,9 @@ const modifierCode: { [key: string]: string } = {
shift: genGuard(`!$event.shiftKey`),
alt: genGuard(`!$event.altKey`),
meta: genGuard(`!$event.metaKey`),
- left: genGuard(`$event.button !== 0`),
- middle: genGuard(`$event.button !== 1`),
- right: genGuard(`$event.button !== 2`)
+ btnleft: genGuard(`$event.button !== 0`),
+ btnmiddle: genGuard(`$event.button !== 1`),
+ btnright: genGuard(`$event.button !== 2`)
}
export function genHandlers (events: ASTElementHandlers, native?: boolean): string {
diff --git a/test/unit/features/directives/on.spec.js b/test/unit/features/directives/on.spec.js
index e518e63f1f7..242af5aa432 100644
--- a/test/unit/features/directives/on.spec.js
+++ b/test/unit/features/directives/on.spec.js
@@ -224,9 +224,9 @@ describe('Directive v-on', () => {
el,
template: `
-
left
-
right
-
right
+
left
+
right
+
right
`,
methods: {
@@ -288,6 +288,8 @@ describe('Directive v-on', () => {
e.keyCode = 40
})
expect(spy).toHaveBeenCalledTimes(3)
+ // reset config
+ Vue.config.keyCodes = Object.create(null)
})
it('should bind to a child component', () => {
@@ -483,4 +485,37 @@ describe('Directive v-on', () => {
triggerEvent(vm.$el, 'click')
}).not.toThrow()
})
+
+ // Github Issue #5046
+ it('should support keyboard modifier', () => {
+ const spyLeft = jasmine.createSpy()
+ const spyRight = jasmine.createSpy()
+ const spyUp = jasmine.createSpy()
+ const spyDown = jasmine.createSpy()
+ vm = new Vue({
+ el,
+ template: `
+
+
+
+
+
+
+ `,
+ methods: {
+ foo: spyLeft,
+ foo1: spyRight,
+ foo2: spyUp,
+ foo3: spyDown
+ }
+ })
+ triggerEvent(vm.$refs.left, 'keydown', e => { e.keyCode = 37 })
+ triggerEvent(vm.$refs.right, 'keydown', e => { e.keyCode = 39 })
+ triggerEvent(vm.$refs.up, 'keydown', e => { e.keyCode = 38 })
+ triggerEvent(vm.$refs.down, 'keydown', e => { e.keyCode = 40 })
+ expect(spyLeft).toHaveBeenCalled()
+ expect(spyRight).toHaveBeenCalled()
+ expect(spyUp).toHaveBeenCalled()
+ expect(spyDown).toHaveBeenCalled()
+ })
})