Моему клиентскому приложению необходимо автоматически настроить высоту текстовой области при изменении ее содержимого. Я могу частично заставить это работать, реагируя на событие input
, например, так:
textarea.addEventListener('input', adjustSize);
Проблема в том, что это не срабатывает, когда значение установлено в коде:
textarea.value = 'some new value';
Есть ли элегантный способ зафиксировать эти изменения? Один из упомянутых мной вариантов - это запуск события вручную, но это не сработает, потому что контекст, в котором мне нужно реагировать на изменение и выполнять изменение размера, явно не знает, когда произошло изменение, и контекстгде я делаю изменения, я не знаю, что какой-то другой фрагмент кода должен знать, когда изменяется значение.
var textarea = document.getElementById('myInput');
textarea.addEventListener('input', adjustSize);
// this does not trigger the event handler
setTimeout(write, 1000);
function adjustSize() {
console.log('adjustSize');
}
function write() {
textarea.value = 'new textarea value';
}
.myInput {
}
<textarea id="myInput" class="myInput">
I am textarea
</textarea>