diff --git a/components/input/Input.tsx b/components/input/Input.tsx index 0239b4755..841e73162 100644 --- a/components/input/Input.tsx +++ b/components/input/Input.tsx @@ -37,7 +37,6 @@ export function resolveOnChange( return; } const event: any = e; - const originalInputValue = target.value; if (e.type === 'click') { Object.defineProperty(event, 'target', { @@ -48,13 +47,13 @@ export function resolveOnChange( }); // click clear icon //event = Object.create(e); - event.target = target; - event.currentTarget = target; + const currentTarget = target.cloneNode(true); + + event.target = currentTarget; + event.currentTarget = currentTarget; // change target ref value cause e.target.value should be '' when clear input - target.value = ''; + (currentTarget as any).value = ''; onChange(event); - // reset target ref value - target.value = originalInputValue; return; } // Trigger by composition event, this means we need force change the input value @@ -227,7 +226,11 @@ export default defineComponent({ if (props.value === undefined) { stateValue.value = value; } else { - instance.update(); + nextTick(() => { + if (inputRef.value.value !== stateValue.value) { + instance.update(); + } + }); } nextTick(() => { callback && callback(); diff --git a/components/input/TextArea.tsx b/components/input/TextArea.tsx index e1e801767..c9e1a45e9 100644 --- a/components/input/TextArea.tsx +++ b/components/input/TextArea.tsx @@ -31,6 +31,7 @@ export default defineComponent({ const formItemContext = useInjectFormItemContext(); const stateValue = ref(props.value === undefined ? props.defaultValue : props.value); const resizableTextArea = ref(); + const mergedValue = ref(''); const { prefixCls, size, direction } = useConfigInject('input', props); const showCount = computed(() => { return (props.showCount as any) === '' || props.showCount || false; @@ -63,7 +64,11 @@ export default defineComponent({ if (props.value === undefined) { stateValue.value = value; } else { - resizableTextArea.value?.instance.update?.(); + nextTick(() => { + if (resizableTextArea.value.textArea.value !== mergedValue.value) { + resizableTextArea.value?.instance.update?.(); + } + }); } nextTick(() => { callback && callback(); @@ -152,7 +157,7 @@ export default defineComponent({ blur, resizableTextArea, }); - const mergedValue = ref(''); + watchEffect(() => { let val = fixControlledValue(stateValue.value) as string; if (