Explorar o código

Input: Fix Korean composition event (#15069)

Moonhyuk Im %!s(int64=6) %!d(string=hai) anos
pai
achega
e9c5e469c1
Modificáronse 1 ficheiros con 12 adicións e 2 borrados
  1. 12 2
      packages/input/src/input.vue

+ 12 - 2
packages/input/src/input.vue

@@ -31,6 +31,7 @@
         :autocomplete="autoComplete || autocomplete"
         ref="input"
         @compositionstart="handleCompositionStart"
+        @compositionupdate="handleCompositionUpdate"
         @compositionend="handleCompositionEnd"
         @input="handleInput"
         @focus="handleFocus"
@@ -87,6 +88,7 @@
       :tabindex="tabindex"
       class="el-textarea__inner"
       @compositionstart="handleCompositionStart"
+      @compositionupdate="handleCompositionUpdate"
       @compositionend="handleCompositionEnd"
       @input="handleInput"
       ref="textarea"
@@ -109,6 +111,7 @@
   import Migrating from 'element-ui/src/mixins/migrating';
   import calcTextareaHeight from './calcTextareaHeight';
   import merge from 'element-ui/src/utils/merge';
+  import {isKorean} from 'element-ui/src/utils/shared';
 
   export default {
     name: 'ElInput',
@@ -336,9 +339,16 @@
       handleCompositionStart() {
         this.isComposing = true;
       },
+      handleCompositionUpdate(event) {
+        const text = event.target.value;
+        const lastCharacter = text[text.length - 1] || '';
+        this.isComposing = !isKorean(lastCharacter);
+      },
       handleCompositionEnd(event) {
-        this.isComposing = false;
-        this.handleInput(event);
+        if (this.isComposing) {
+          this.isComposing = false;
+          this.handleInput(event);
+        }
       },
       handleInput(event) {
         // should not emit input during composition