Liebes SorkenKind mech,
huhu nochmal ;)
was hindert Dich denn daran, bei jeder Textarea den Inhalt zu ermitteln und dann die Größenanpassung basierend auf dem value-Wert durchzuführen?
ähm ... du überrumpelst mich gerade mit der frage, da dies eigentlich garnicht thematisiert ist, aber dennoch: wenn ich über den value gehe, dass müsste ich ja anzahl zeilenumbrüche, verwendete Schriftart, Zeilenhöhe etc berücksichtigen, daher gehe ich über scrollHeight - einfach, unkompliziert, funzt - zumindest in den Browsern, die ich unterstützen möchte
Wenn das in Deiner Resize-Funktionalität jedes Mal berechnet wird, kannst Du auch bein Initialisieren (also alle textarea-Elemente einmal durch den Eventhandler jagen) diese Anpassung vornehmen.
ich hatte eben gehofft das irgendwie vermeiden zu können, sprich eine schönere Lösung zu finden ...
und auch die "Lösung", die molilys vorschlug würde nicht alle Probleme erschlagen ... sicherlich würde zu anfang erstmal alle textarea-Elemente verarbeitet werden, auch nachträglich hinzugefügte Elemente würden berücksichtigt, jedoch nicht deren initialwert
sprich füge ich nachträglich ein textarea in das DOM ein, welches bereits einen großen text beinhaltet, würde dieses nicht resized werden, zumindest nicht bevor ich mit dem Textfeld irgendwas mache (drauf klicken, etc)
ich habe mich (für den Moment) für diese Lösung entschieden, auch wenn mich das Interval dabei stört:
var count_textarea_auto_height=0;
var textarea_resize = function(event) {
resize_textarea_fkt(event.target);
}
function resize_textarea_fkt(obj)
{
obj.style.overflow='scroll'; // chrome workaround
obj.style.height=obj.scrollHeight + 'px';
obj.style.overflow='hidden'; // chrome workaround
}
function textarea_auto_height()
{
objs=document.getElementsByTagName('textarea');
if(objs.length!=count_textarea_auto_height)
{
count_textarea_auto_height=objs.length;
for(i=0;i<objs.length;i++)
{
obj=objs[i];
if(!obj.getAttribute("tah"))
{
obj.addEventListener('keyup', textarea_resize, false);
resize_textarea_fkt(obj);
obj.setAttribute("tah",true);
}
}
}
}
window.setInterval("textarea_auto_height()",1000);
schöner habe ich es leider für den Moment noch nicht hinbekommen, um wirklich alle Bedürfnisse abzudecken ...
Liebe Grüße,
Felix Riesterer.