Skip to content

Commit e8e2913

Browse files
yyx990803awamwang
authored andcommitted
warn click.right (close vuejs#5330)
1 parent 018595f commit e8e2913

File tree

3 files changed

+32
-5
lines changed

3 files changed

+32
-5
lines changed

src/compiler/codegen/events.js

+17-2
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,25 @@ const modifierCode: { [key: string]: string } = {
3434
right: genGuard(`'button' in $event && $event.button !== 2`)
3535
}
3636

37-
export function genHandlers (events: ASTElementHandlers, native?: boolean): string {
37+
export function genHandlers (
38+
events: ASTElementHandlers,
39+
native: boolean,
40+
warn: Function
41+
): string {
3842
let res = native ? 'nativeOn:{' : 'on:{'
3943
for (const name in events) {
40-
res += `"${name}":${genHandler(name, events[name])},`
44+
const handler = events[name]
45+
// #5330: warn click.right, since right clicks do not actually fire click events.
46+
if (process.env.NODE_ENV !== 'production' &&
47+
name === 'click' &&
48+
handler && handler.modifiers && handler.modifiers.right
49+
) {
50+
warn(
51+
`Use "contextmenu" instead of "click.right" since right clicks ` +
52+
`do not actually fire "click" events.`
53+
)
54+
}
55+
res += `"${name}":${genHandler(name, handler)},`
4156
}
4257
return res.slice(0, -1) + '}'
4358
}

src/compiler/codegen/index.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -205,10 +205,10 @@ function genData (el: ASTElement): string {
205205
}
206206
// event handlers
207207
if (el.events) {
208-
data += `${genHandlers(el.events)},`
208+
data += `${genHandlers(el.events, false, warn)},`
209209
}
210210
if (el.nativeEvents) {
211-
data += `${genHandlers(el.nativeEvents, true)},`
211+
data += `${genHandlers(el.nativeEvents, true, warn)},`
212212
}
213213
// slot target
214214
if (el.slotTarget) {

test/unit/features/directives/on.spec.js

+13-1
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,16 @@ describe('Directive v-on', () => {
44
let vm, spy, el
55

66
beforeEach(() => {
7+
vm = null
78
spy = jasmine.createSpy()
89
el = document.createElement('div')
910
document.body.appendChild(el)
1011
})
1112

1213
afterEach(() => {
13-
document.body.removeChild(vm.$el)
14+
if (vm) {
15+
document.body.removeChild(vm.$el)
16+
}
1417
})
1518

1619
it('should bind event to a method', () => {
@@ -548,4 +551,13 @@ describe('Directive v-on', () => {
548551
triggerEvent(vm.$refs.input, 'keydown', e => { e.keyCode = 13 })
549552
expect(prevented).toBe(true)
550553
})
554+
555+
it('should warn click.right', () => {
556+
new Vue({
557+
template: `<div @click.right="foo"></div>`,
558+
methods: { foo () {} }
559+
}).$mount()
560+
561+
expect(`Use "contextmenu" instead`).toHaveBeenWarned()
562+
})
551563
})

0 commit comments

Comments
 (0)