Welchen Ansatz Sie verwenden, hängt natürlich davon ab, was Ihr Endziel ist. Wenn Sie die Ergebnisse mit einem Formular senden möchten, bedeutet die Verwendung nativer Formularelemente, dass Sie zum Senden kein Skript verwenden müssen. Wenn die Skripterstellung deaktiviert ist, funktioniert der Fallback auch ohne die ausgefallenen Grow-Shrink-Effekte. Wenn Sie den Klartext aus einem inhaltsbearbeitbaren Element herausholen möchten , können Sie jederzeit auch Skripte wie node.textContent verwenden , um das HTML zu entfernen , das die Browser in die Benutzereingabe einfügen.
Diese Version verwendet native Formularelemente mit geringfügigen Verbesserungen in einigen der vorherigen Beiträge.
Dadurch kann auch der Inhalt verkleinert werden.
Verwenden Sie dies in Kombination mit CSS für eine bessere Kontrolle.
<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';
};
});
Sie können etwas Ähnliches mit <textarea> -Elementen verwenden
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';
};
});
Dies flackert in Chrome nicht. Die Ergebnisse können in anderen Browsern variieren. Testen Sie daher.