diff --git a/packages/cascader/src/main.vue b/packages/cascader/src/main.vue index a5bdc4ffa..c02b70799 100644 --- a/packages/cascader/src/main.vue +++ b/packages/cascader/src/main.vue @@ -10,9 +10,12 @@ ]" @click="handleClick" @mouseenter="inputHover = true" + @focus="inputHover = true" @mouseleave="inputHover = false" + @blur="inputHover = false" ref="reference" v-clickoutside="handleClickoutside" + @keydown="handleKeydown" > { @@ -257,6 +272,23 @@ export default { }); this.$emit('active-item-change', value); }, + handleKeydown(e) { + const keyCode = e.keyCode; + if (keyCode === 13) { + this.handleClick(); + } else if (keyCode === 40) { // down + this.menuVisible = true; // 打开 + setTimeout(() => { + const firstMenu = this.popperElm.querySelectorAll('.el-cascader-menu')[0]; + firstMenu.querySelectorAll("[tabindex='-1']")[0].focus(); + }); + e.stopPropagation(); + e.preventDefault(); + } else if (keyCode === 27 || keyCode === 9) { // esc tab + this.inputValue = ''; + if (this.menu) this.menu.visible = false; + } + }, handlePick(value, close = true) { this.currentValue = value; this.$emit('input', value); diff --git a/packages/cascader/src/menu.vue b/packages/cascader/src/menu.vue index 07dff214a..09aeb0076 100644 --- a/packages/cascader/src/menu.vue +++ b/packages/cascader/src/menu.vue @@ -1,6 +1,7 @@