EINE VOLLSTÄNDIGE UND DOCH EINFACHE LÖSUNG
Aktualisiert 2022-08-30 (Unterstützung für einzeilige Mehrfach-Textfelder als Standard hinzugefügt)
Der folgende Code wird funktionieren:
- Bei Tasteneingabe.
- Mit eingefügtem Text (Rechtsklick & ctrl+v).
- Mit ausgeschnittenem Text (Rechtsklick & ctrl+x).
- Mit vorinstalliertem Text.
- Bei allen Textarea's (mehrzeilige Textfelder) standortübergreifend.
- Mit Firefox (v31-67 getestet).
- Mit Chrom (v37-74 getestet).
- Mit IE (v9-v11 getestet).
- Mit Kante (v14-v18 getestet).
- Mit IOS Safari .
- Mit Android-Browser .
- Mit JavaScript strenger Modus .
- Ist w3c validiert.
- Und ist stromlinienförmig und effizient.
OPTION 1 (Mit jQuery)
Diese Option erfordert jQuery und wurde getestet und funktioniert mit 1.7.2 - 3.6
Einfach (Fügen Sie diesen Jquery-Code in Ihre Master-Skriptdatei ein und vergessen Sie ihn).
$("textarea").each(function () {
this.setAttribute("style", "height:" + (this.scrollHeight) + "px;overflow-y:hidden;");
}).on("input", function () {
this.style.height = 0;
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>
<a href="http://jsfiddle.net/n9uuv0hd/54/" rel="noreferrer">Test on jsfiddle</a>
OPTION 2 (Reines JavaScript)
Einfach (Fügen Sie dieses JavaScript in Ihre Master-Skriptdatei ein 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 = 0;
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>
<a href="http://jsfiddle.net/n9uuv0hd/80/" rel="noreferrer">Test on jsfiddle</a>
OPTION 3 (jQuery-Erweiterung)
Nützlich, wenn Sie weitere Verkettungen auf die Textbereiche anwenden möchten, deren Größe automatisch angepasst werden soll.
jQuery.fn.extend({
autoHeight: function () {
function autoHeight_(element) {
return jQuery(element)
.css({ "height": 0, "overflow-y": "hidden" })
.height(element.scrollHeight);
}
return this.each(function() {
autoHeight_(this).on("input", function() {
autoHeight_(this);
});
});
}
});
Aufrufen mit $("textarea").autoHeight()
AKTUALISIERUNG DER TEXTAREA ÜBER JAVASCRIPT
Wenn Sie Inhalte über JavaScript in ein Textfeld einfügen, fügen Sie den folgenden Code ein, um die Funktion in Option 1 aufzurufen.
$("textarea").trigger("input");
VOREINGESTELLTE TEXTAREA-HÖHE
Um die Anfangshöhe der Textarea 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 = 0;
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>
3 Stimmen
Meine Funktion macht Fehler. Es ist notwendig, eine neue Zeile am Ende der Zeile einzugeben. Dies ist die bessere Lösung. james.padolsey.com/javascript/jquery-plugin-autoresize
0 Stimmen
Sie können mein Plugin dafür ausprobieren: github.com/AndrewDryga/jQuery.Textarea.Autoresize
0 Stimmen
Mögliche Duplikate von Automatische Größenanpassung der Textarea mit Prototyp
0 Stimmen
Ich habe ein Paket dafür erstellt, falls Sie React verwenden: npmjs.com/package/react-fluid-textarea
0 Stimmen
Sortieren und süße Antwort hier: stackoverflow.com/a/995374/5114465
function textAreaAdjust(o) { o.style.height = "1px"; o.style.height = (25+o.scrollHeight)+"px"; }
<textarea onkeyup="textAreaAdjust(this)" style="overflow:hidden"></textarea>
0 Stimmen
Nur mit CSS (und einem Wrapper-Element): css-tricks.com/the-cleanest-trick-for-autogrowing-textareas