I've got two <textarea>
s, one editable ta2
one is not ta1
. They both need to expand as text is entered into the editable one, and shrink when text is removed.
<div
class="items-center p-2 align-top"
v-if="isFirstColumn(index)"
>
<textarea class="resize-none" id="ta1" cols="30" rows="5" v-model="row.value" readonly="true" />
</div>
<span v-else>
<textarea @input="autoGrow($event.target)" class="resize-none" id="ta2" cols="30" rows="5" v-model="row.value" />
</span>
The event handler:
private autoGrow(element) {
if ((element.scrollHeight)+'px' > (document.getElementById('ta1') as HTMLTextAreaElement).style.height) {
element.style.height = 'auto';
element.style.height = (element.scrollHeight)+'px';
(document.getElementById('ta1') as HTMLTextAreaElement).style.height = 'auto';
(document.getElementById('ta1') as HTMLTextAreaElement).style.height = (element.scrollHeight)+'px';
}
else{
(document.getElementById('ta1') as HTMLTextAreaElement).style.height = 'auto';
(document.getElementById('ta1') as HTMLTextAreaElement).style.height = ((document.getElementById('ta1') as HTMLTextAreaElement).scrollHeight)+'px';
element.style.height = (document.getElementById('ta1') as HTMLTextAreaElement).style.height;
}
}
When entering more text into ta2, once ta2 surpasses ta1 in size they will both start expanding. However, when deleting text I have an issue: Despite there still being much more text in ta2, it will jump back to ta1's size every other deletion. This is because of setting them both to the same height and then backspacing. I cant figure out how to resolve this.