2010-12-28 2 views
3

Ich setze die Breite eines Textfelds auf 100%, aber jetzt muss ich wissen, wie viele Zeichen in einer Zeile passen können.Wie man eine Textarea in Höhe automatisch einstellt?

Ich versuche eine JavaScript-Funktion zu schreiben, um ein Textfeld automatisch zu vergrößern/verkleinern. Ich versuche, jquery nicht zu benutzen, da ich nur diese eine Funktion brauche.

Meine Logik rows = textarea.value.split('\n') ist, durchlaufen rows und count += rows[i].length/textarea.cols, dann count += rows.length und schließlich textarea.rows = count. Das einzige Problem ist, dass count zu groß ist, weil textarea.cols zu klein ist.

+3

Dies ist ein schwieriges Problem. Bei den meisten Schriftarten ist es unmöglich, eine feste Anzahl zulässiger Zeichen vorherzusagen, da jedes Zeichen eine andere Breite hat. Sie müssen eine monospaced Schriftart wie Kurier verwenden, um dies zu tun –

+0

Warum JavaScript verwenden? Kannst du CSS benutzen? #textareaId {Breite: 100%; } – brildum

+0

@Pekka - immer viel Spaß beim Lesen Ihrer Antworten/Kommentare – ifaour

Antwort

2

Mit dieser Funktion wird die Höhe des Elements (in Ihrem Fall Textfeld) auf die Standardhöhe des Browsers eingestellt. Wenn dadurch eine Bildlaufleiste erscheint, wird die Höhe auf die tatsächlich benötigte Höhe umgeschaltet.

function autoHeight(element){ 
    element.style.height='auto'; 
    element.style.height=element.scrollHeight+'px'; 
} 

Wenn Sie nicht die Standardhöhe des Browsers möchten, können Sie, dass an einen anderen Standardwert des eigenen ändern, natürlich.

+0

+1 für eine der besten Antworten zu diesem Thema Ich habe gefunden. Die einzige Sache, die ich ändern würde, ist, 'element.style.height = 0;' zu verwenden, um sicherzustellen, dass die 'textarea' Höhe so wenig wie möglich ist. Ansonsten, im Falle des Browsers, den ich verwende, sind es mindestens zwei Zeilen. – Grzegorz

+0

Danke. Sie können der Funktion auch einen 'minHeight'-Parameter hinzufügen. Eine Höhe von 0 kann zu Flackern führen, wenn Sie dies beispielsweise in einem Keyup-Ereignis verwenden. – DanMan