瀏覽代碼

Select: fix keydown event when composition (#21336)

bchen1029 3 年之前
父節點
當前提交
5e037ceaa6
共有 2 個文件被更改,包括 16 次插入5 次删除
  1. 4 1
      packages/input/src/input.vue
  2. 12 4
      packages/select/src/select.vue

+ 4 - 1
packages/input/src/input.vue

@@ -337,15 +337,18 @@
         this.focused = true;
         this.$emit('focus', event);
       },
-      handleCompositionStart() {
+      handleCompositionStart(event) {
+        this.$emit('compositionstart', event);
         this.isComposing = true;
       },
       handleCompositionUpdate(event) {
+        this.$emit('compositionupdate', event);
         const text = event.target.value;
         const lastCharacter = text[text.length - 1] || '';
         this.isComposing = !isKorean(lastCharacter);
       },
       handleCompositionEnd(event) {
+        this.$emit('compositionend', event);
         if (this.isComposing) {
           this.isComposing = false;
           this.handleInput(event);

+ 12 - 4
packages/select/src/select.vue

@@ -52,8 +52,8 @@
         @blur="softFocus = false"
         @keyup="managePlaceholder"
         @keydown="resetInputState"
-        @keydown.down.prevent="navigateOptions('next')"
-        @keydown.up.prevent="navigateOptions('prev')"
+        @keydown.down.prevent="handleNavigate('next')"
+        @keydown.up.prevent="handleNavigate('prev')"
         @keydown.enter.prevent="selectOption"
         @keydown.esc.stop.prevent="visible = false"
         @keydown.delete="deletePrevTag"
@@ -84,11 +84,14 @@
       @focus="handleFocus"
       @blur="handleBlur"
       @input="debouncedOnInputChange"
-      @keydown.native.down.stop.prevent="navigateOptions('next')"
-      @keydown.native.up.stop.prevent="navigateOptions('prev')"
+      @keydown.native.down.stop.prevent="handleNavigate('next')"
+      @keydown.native.up.stop.prevent="handleNavigate('prev')"
       @keydown.native.enter.prevent="selectOption"
       @keydown.native.esc.stop.prevent="visible = false"
       @keydown.native.tab="visible = false"
+      @compositionstart="handleComposition"
+      @compositionupdate="handleComposition"
+      @compositionend="handleComposition"
       @mouseenter.native="inputHovering = true"
       @mouseleave.native="inputHovering = false">
       <template slot="prefix" v-if="$slots.prefix">
@@ -440,6 +443,11 @@
     },
 
     methods: {
+      handleNavigate(direction) {
+        if (this.isOnComposition) return;
+
+        this.navigateOptions(direction);
+      },
       handleComposition(event) {
         const text = event.target.value;
         if (event.type === 'compositionend') {