Просмотр исходного кода

fix v-on number keyCode support

Evan You 10 лет назад
Родитель
Сommit
63da54ddee

+ 3 - 3
src/compiler/events.js

@@ -53,10 +53,10 @@ function genHandler (
 }
 
 function genKeyFilter (key: string): string {
-  const code = keyCodes[key]
+  const code = keyCodes[key] || JSON.stringify(key)
   if (Array.isArray(code)) {
-    return `if(${code.map(c => `$event.keyCode!==${c}`).join('&&')})return;`
+    return `if(${code.map(c => `$event.keyCode!=${c}`).join('&&')})return;`
   } else {
-    return `if($event.keyCode!==${code})return;`
+    return `if($event.keyCode!=${code})return;`
   }
 }

+ 24 - 0
test/unit/features/directives/on.spec.js

@@ -102,6 +102,30 @@ describe('Directive v-on', () => {
     expect(callOrder.toString()).toBe('1,2')
   })
 
+  it('should support keyCode', () => {
+    vm = new Vue({
+      el,
+      template: `<input @keyup.enter="foo">`,
+      methods: { foo: spy }
+    })
+    triggerEvent(vm.$el, 'keyup', e => {
+      e.keyCode = 13
+    })
+    expect(spy).toHaveBeenCalled()
+  })
+
+  it('should support number keyCode', () => {
+    vm = new Vue({
+      el,
+      template: `<input @keyup.13="foo">`,
+      methods: { foo: spy }
+    })
+    triggerEvent(vm.$el, 'keyup', e => {
+      e.keyCode = 13
+    })
+    expect(spy).toHaveBeenCalled()
+  })
+
   it('should bind to a child component', () => {
     Vue.component('bar', {
       template: '<span>Hello</span>'

+ 7 - 2
test/unit/modules/compiler/codegen.spec.js

@@ -216,12 +216,17 @@ describe('codegen', () => {
   it('generate events with keycode', () => {
     assertCodegen(
       '<input @input.enter="onInput">',
-      `with(this){return _h(_e('input',{on:{"input":function($event){if($event.keyCode!==13)return;onInput($event)}}}))}`
+      `with(this){return _h(_e('input',{on:{"input":function($event){if($event.keyCode!=13)return;onInput($event)}}}))}`
     )
     // multiple keycodes (delete)
     assertCodegen(
       '<input @input.delete="onInput">',
-      `with(this){return _h(_e('input',{on:{"input":function($event){if($event.keyCode!==8&&$event.keyCode!==46)return;onInput($event)}}}))}`
+      `with(this){return _h(_e('input',{on:{"input":function($event){if($event.keyCode!=8&&$event.keyCode!=46)return;onInput($event)}}}))}`
+    )
+    // number keycode
+    assertCodegen(
+      '<input @input.13="onInput">',
+      `with(this){return _h(_e('input',{on:{"input":function($event){if($event.keyCode!="13")return;onInput($event)}}}))}`
     )
   })