EINE KOMPLETTE NOCH EINFACHE LÖSUNG
Aktualisiert 14.05.2020
(Verbesserte Browserunterstützung für Handys und Tablets)
Der folgende Code funktioniert:
- Bei Tastatureingabe.
- Mit eingefügtem Text (Rechtsklick & Strg + V).
- Mit ausgeschnittenem Text (Rechtsklick & Strg + x).
- Mit vorinstalliertem Text.
- Mit der gesamten Website aller Textbereiche (mehrzeilige Textfelder) .
- Mit Firefox (v31-67 getestet).
- Mit Chrome (v37-74 getestet).
- Mit IE (v9-v11 getestet).
- Mit Edge (v14-v18 getestet).
- Mit IOS Safari .
- Mit Android Browser .
- Mit JavaScript strengen Modus .
- Ist w3c validiert.
- Und ist rationalisiert und effizient.
OPTION 1 (Mit jQuery)
Diese Option erfordert jQuery und wurde getestet und funktioniert mit 1.7.2 - 3.3.1
Einfach (Fügen Sie diesen Abfragecode zu Ihrer Master-Skriptdatei hinzu und vergessen Sie ihn.)
$('textarea').each(function () {
this.setAttribute('style', 'height:' + (this.scrollHeight) + 'px;overflow-y:hidden;');
}).on('input', function () {
this.style.height = 'auto';
this.style.height = (this.scrollHeight) + 'px';
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<textarea placeholder="Type, paste, cut text here...">PRELOADED TEXT.
This javascript should now add better support for IOS browsers and Android browsers.</textarea>
<textarea placeholder="Type, paste, cut text here..."></textarea>
Test on jsfiddle
OPTION 2 (reines JavaScript)
Einfach (Fügen Sie dieses JavaScript zu Ihrer Master-Skriptdatei hinzu und vergessen Sie es.)
const tx = document.getElementsByTagName('textarea');
for (let i = 0; i < tx.length; i++) {
tx[i].setAttribute('style', 'height:' + (tx[i].scrollHeight) + 'px;overflow-y:hidden;');
tx[i].addEventListener("input", OnInput, false);
}
function OnInput() {
this.style.height = 'auto';
this.style.height = (this.scrollHeight) + 'px';
}
<textarea placeholder="Type, paste, cut text here...">PRELOADED TEXT. This JavaScript should now add better support for IOS browsers and Android browsers.</textarea>
<textarea placeholder="Type, paste, cut text here..."></textarea>
Test on jsfiddle
OPTION 3 (jQuery-Erweiterung)
Nützlich, wenn Sie die Textbereiche, deren Größe automatisch angepasst werden soll, weiter verketten möchten.
jQuery.fn.extend({
autoHeight: function () {
function autoHeight_(element) {
return jQuery(element)
.css({ 'height': 'auto', 'overflow-y': 'hidden' })
.height(element.scrollHeight);
}
return this.each(function() {
autoHeight_(this).on('input', function() {
autoHeight_(this);
});
});
}
});
Rufen Sie mit auf $('textarea').autoHeight()
AKTUALISIERUNG VON TEXTAREA ÜBER JAVASCRIPT
Wenn Sie Inhalte über JavaScript in einen Textbereich einfügen, fügen Sie den folgenden Code hinzu, um die Funktion in Option 1 aufzurufen.
$('textarea').trigger('input');
PRESET TEXTAREA HÖHE
Um die Anfangshöhe des Textbereichs festzulegen, müssen Sie eine zusätzliche Bedingung hinzufügen:
const txHeight = 16;
const tx = document.getElementsByTagName("textarea");
for (let i = 0; i < tx.length; i++) {
if (tx[i].value == '') {
tx[i].setAttribute("style", "height:" + txHeight + "px;overflow-y:hidden;");
} else {
tx[i].setAttribute("style", "height:" + (tx[i].scrollHeight) + "px;overflow-y:hidden;");
}
tx[i].addEventListener("input", OnInput, false);
}
function OnInput(e) {
this.style.height = "auto";
this.style.height = (this.scrollHeight) + "px";
}
<textarea placeholder="Type, paste, cut text here...">PRELOADED TEXT. This JavaScript should now add better support for IOS browsers and Android browsers.</textarea>
<textarea placeholder="Type, paste, cut text here..."></textarea>