To, które podejście zastosujesz, zależy oczywiście od tego, jaki jest Twój końcowy cel. Jeśli chcesz przesłać wyniki za pomocą formularza, użycie natywnych elementów formularza oznacza, że nie musisz używać skryptów do przesyłania. Ponadto, jeśli skrypty są wyłączone, funkcja rezerwowa nadal działa bez wymyślnych efektów kurczenia się. Jeśli chcesz uzyskać zwykłego tekstu z pomocą contentEditable elementu zawsze można też użyć włączony jak node.textContent rozebrać się html że przeglądarek wstawić do danych wprowadzonych przez użytkownika.
Ta wersja używa natywnych elementów formularza z drobnymi poprawkami w niektórych poprzednich postach.
Pozwala również zmniejszyć zawartość.
Użyj tego w połączeniu z CSS dla lepszej kontroli.
<html>
<textarea></textarea>
<br>
<input type="text">
<style>
textarea {
width: 300px;
min-height: 100px;
}
input {
min-width: 300px;
}
<script>
document.querySelectorAll('input[type="text"]').forEach(function(node) {
var minWidth = parseInt(getComputedStyle(node).minWidth) || node.clientWidth;
node.style.overflowX = 'auto'; // 'hidden'
node.onchange = node.oninput = function() {
node.style.width = minWidth + 'px';
node.style.width = node.scrollWidth + 'px';
};
});
Możesz użyć czegoś podobnego z elementami <textarea>
document.querySelectorAll('textarea').forEach(function(node) {
var minHeight = parseInt(getComputedStyle(node).minHeight) || node.clientHeight;
node.style.overflowY = 'auto';
node.onchange = node.oninput = function() {
node.style.height = minHeight + 'px';
node.style.height = node.scrollHeight + 'px';
};
});
To nie migocze w Chrome, wyniki mogą się różnić w innych przeglądarkach, więc przetestuj.