diff --git a/src/compiler/codegen/events.js b/src/compiler/codegen/events.js index d2001bb7..7c4e72b8 100644 --- a/src/compiler/codegen/events.js +++ b/src/compiler/codegen/events.js @@ -22,13 +22,15 @@ const keyNames: { [key: string]: string | Array } = { esc: ['Esc', 'Escape'], tab: 'Tab', enter: 'Enter', - space: ' ', + // #9112: IE11 uses `Spacebar` for Space key name. + space: [' ', 'Spacebar'], // #7806: IE11 uses key names without `Arrow` prefix for arrow keys. up: ['Up', 'ArrowUp'], left: ['Left', 'ArrowLeft'], right: ['Right', 'ArrowRight'], down: ['Down', 'ArrowDown'], - 'delete': ['Backspace', 'Delete'] + // #9112: IE11 uses `Del` for Delete key name. + 'delete': ['Backspace', 'Delete', 'Del'] } // #4868: modifiers that prevent the execution of the listener diff --git a/test/unit/modules/compiler/codegen.spec.js b/test/unit/modules/compiler/codegen.spec.js index b3f5ba47..8525e424 100644 --- a/test/unit/modules/compiler/codegen.spec.js +++ b/test/unit/modules/compiler/codegen.spec.js @@ -333,12 +333,22 @@ describe('codegen', () => { // multiple keycodes (delete) assertCodegen( '', - `with(this){return _c('input',{on:{"input":function($event){if(!('button' in $event)&&_k($event.keyCode,"delete",[8,46],$event.key,["Backspace","Delete"]))return null;return onInput($event)}}})}` + `with(this){return _c('input',{on:{"input":function($event){if(!('button' in $event)&&_k($event.keyCode,"delete",[8,46],$event.key,["Backspace","Delete","Del"]))return null;return onInput($event)}}})}` + ) + // multiple keycodes (esc) + assertCodegen( + '', + `with(this){return _c('input',{on:{"input":function($event){if(!('button' in $event)&&_k($event.keyCode,"esc",27,$event.key,["Esc","Escape"]))return null;return onInput($event)}}})}` + ) + // multiple keycodes (space) + assertCodegen( + '', + `with(this){return _c('input',{on:{"input":function($event){if(!('button' in $event)&&_k($event.keyCode,"space",32,$event.key,[" ","Spacebar"]))return null;return onInput($event)}}})}` ) // multiple keycodes (chained) assertCodegen( '', - `with(this){return _c('input',{on:{"keydown":function($event){if(!('button' in $event)&&_k($event.keyCode,"enter",13,$event.key,"Enter")&&_k($event.keyCode,"delete",[8,46],$event.key,["Backspace","Delete"]))return null;return onInput($event)}}})}` + `with(this){return _c('input',{on:{"keydown":function($event){if(!('button' in $event)&&_k($event.keyCode,"enter",13,$event.key,"Enter")&&_k($event.keyCode,"delete",[8,46],$event.key,["Backspace","Delete","Del"]))return null;return onInput($event)}}})}` ) // number keycode assertCodegen(