nam: Will fehlerloses Tutorial verfassen (autom. vergr. Textarea)

Beitrag lesen

Hi

Meiner Ansicht nacht gibts da noch einiges zu verbessern:

1.) onkeydown="setTimeout('addZeile()',10)"
Ich bevorzuge HTML und JavaScript zu trennen, also kein onkeydown, sondern mit JavaScript dem Element den Event-Handler zuzuweisen.
Der keydownevent ist hier ungünstig: besser keypress, da dieser nur bei keys ausgelöst wird, die auch ein geschriebenes Zeichen zur Folge haben.
Wenn du setTimeout einen String mit einer Funktion übergibts, rufst du ein implizites eval() auf. Besser eine anonyme Funktion:
setTimeout(function(){addZeile();},10)
Wieso braucht es eigentlich ein setTimeout?

2.) Es ist üblich, Variabeln klein zu schreiben und am besten halt auf Englisch. Ausserdem sollte vorzugsweise nur ein var pro scope stehen:

  
var maxHeight = maxHeight || 560,  
	text = eingabe.value,  
	lines = text.split('\n'),  
	space = 0,  
	altPos = 0,  
	lineLength = 0,  
	counter,  
	position;  

Ausserdem habe ich den Wert 560 (für maximale Höhe) als Parameter definiert, da er vom Layout abhängig ist und somit angegeben werden muss.

3.) Verwende nicht 'name', um auf das Element zuzugreifen. Besser 'id' o.ä.
Ausserdem würde ich das Element als parameter der Funktion übergeben:

  
addZeile(document.getElementById('eingabe'));  

4.) while (true)
ersetzen mit
do {} while (position !== altPos);

5.) Wie kommt der Wert 60 zustande? Sind das die Anzahl Zeichen pro Zeile? Der dürfte je nach Schriftgrösse und Schriftart ändern. Kann man den nicht dynamisch berechnen?

6.) eingabe.style.height = abstand+'px'; nur ausführen, wenn sich der Wert tatsächlich ändert.

7.) http://www.jslint.com/

Gruss,
Mathias