dynamic textarea
bble
- javascript
Hallo,
ich habe vor ner weile mal angefangen ne dymaische Textbox zu realisieren, diese soll automatisch die Rows-anzahl anpassen je nachdem wieviel Inhalt angezeigt werden soll.
Zunächste versuchte ich es über die splittung mittels \n aber das funktioniert nicht weil da immer nur 1 raus kam, nur wenn ich die umbrüche selbst in Javascript gefüllt hatte ging das, aber das funzt leider so nicht.
Dann wollte ich es über das scrollen machen, denn der Browser weiss ja schon irgendwie das es jetzt zu viel Inhalt wird, also zeigt er den scrollbalken an, wenn ich da rankommen würde könnte ich anstatt dem scrollbalken eine row mehr anzeigen, wegnehmen ner row, analog. Aber da wird man wohl nicht rankommen, oder?
Darum nun mein Ansatz 3:
Ich hol mir aus dem value alle einzelnen Wörter, gekennzeichnet durch ein Leerzeichen " ", laufe alle diese durch und füge sie dem neuen Content solange hinzu solange es kleiner den cols ist, falls es größer ist wird ein \n eingefügt und eine neue row, am ende bau ich das dann alles in die textarea ein. Bei mir springt er aber schon nicht in die WHILE-Loop, hat jemand ne Ahnung was ich falsch machen könnte?
Bin ich schon so Betriebsblind das ich das jetzt nicht mehr sehe?
Geht das prinzipiell überhaupt?????????????
DANKE FÜR ALLE ANREGUNGEN!!!!
Der Code enthält noch einigen DEBUG-Mist, sorry dafür, aber vielleicht hilft es euch mir zu helfen :-)
Vielen Dank schon im Vorraus! Und liebe Grüße
bble
------------ Code -------------
<HTML>
<HEAD><TITLE>Textarea dynamisch Größe verändern!</TITLE>
<script language="JavaScript" type="text/javascript">
function getRows()
{
alert("los gehts");
var textarea = document.getElementById("myTa");
var cols = textarea.cols;
var content = textarea.value.split(" ");
var neuContent = "";
Div = document.getElementById("blub");
var last = 0;
var rowsNumber = 0;
while(last <= content.length) {
alert("content length: " + content.length + "last: " +last);
neuContent = neuContent + content[last];
if ((last +1) <= content.length) {
while((content[last].length + content[last + 1].length ) <= cols) {
neuContent = neuContent + " " + content[last+1] ;
Div.innerHTML = "neuer Content: \n" + neuContent;
last++;
}
alert("Wieder eine Zeile fertig!");
neuContent = neuContent + "\n";
rowsNumber++;
Div.innerHTML = "neuer Content: \n" + neuContent + "\n rows anzahl: " + rowsNumber;
last++;
}
}
alert("Neu Content ist: "+ neuContent);
textarea.value = neuContent;
textarea.rows = rowsNumber;
Div.innerHTML = "neuer Content: \n" + neuContent;
}
</script>
</HEAD>
<BODY>
<textarea id=myTa cols=20 rows=1>Peter trifft sich bei Freunden und trinkt ein Bier!</textarea>
<input type=button value="get rows" onClick="getRows();">
<p>
<div id="blub">Inhalt wird ausgetauscht...</div>
</p>
</BODY>
</HTML>
------------ Code -------------
<HTML>
Wieso kein DOCTYPE?
while(last <= content.length) {
warum machst du nicht eine normale for Schleife?
while((content[last].length + content[last + 1].length ) <= cols) {
und hier auch, deshalb erhälst du auch eine Fehlermeldung, die du uns leider nicht gesagt hast, deshalb wird auch die Schleife nicht beendet.
<textarea id=myTa cols=20 rows=1>Peter trifft sich bei Freunden und trinkt ein Bier!</textarea>
<input type=button value="get rows" onClick="getRows();">
Du solltest auch versuchen gültiges HTML zu schreiben, das verringert die Fehlemöglichkeiten.
Struppi.
Hi, danke für die Anregungen,
naja, das Ganze ist ja nur ein Ausprobieren und daher sollte ein rudimentäres HTML-Gerüst drum rum ja ausreichen. Ich werde mir das mit der For-Schleife mal durch den Kopf gehen lasse. Das mit der Fehlermeldung wusste ich allerdings nicht, bei mir kommt nämlich keine... bei mir läuft es durch und zeigt am Ende den Text orginal an... also er geht gar nicht in die innere While, die äußere aber schon... hmm, mal schaun ob ich das mit ner FOR auch hinbekommen...
Aber könnte es prinzipiell so funktionieren?
Grüße
bble
naja, das Ganze ist ja nur ein Ausprobieren und daher sollte ein rudimentäres HTML-Gerüst drum rum ja ausreichen. Ich werde mir das mit der For-Schleife mal durch den Kopf gehen lasse. Das mit der Fehlermeldung wusste ich allerdings nicht, bei mir kommt nämlich keine...
also ich bekommen folgende Fehlermeldung:
Fehler: content[last + 1] has no properties
Quelldatei: xxxx
Zeile: 25
Aber könnte es prinzipiell so funktionieren?
Ich vermute nicht, aber ich hab mir die Logik nicht genau angeschaut.
Struppi.
Komisch wieso bekomm ich die Fehlermeldung nicht?
Naja, jedenfalls hab ichs jetzt gesteckt, es funktioniert auch mit for-schleifen und viel drum rum gebaue nicht wie ich es will, da ich Text nur am Ende einfügen kann.
Hat hier irgendwer schon mal dieses Problem gehabt und einen Ansatz? Lösung? Oder musste noch niemand die Textarea dynamisch und on-the-fly an den Inhalt anpassen?
Vielen Dank für die Hilfe Struppi und vielleicht kann ja jemand doch noch ein paar Ideen bringen, ich bin grad so tierisch demotiviert, ist das alles ein mist :-)
Grüße
bble