fix: input textarea cursor pos error

pull/5043/head^2
tangjinzhou 2021-12-16 14:30:27 +08:00
parent 31c8339315
commit 66eb020ce1
2 changed files with 17 additions and 9 deletions

View File

@ -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();

View File

@ -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 (