2008-09-29 4 views
22

Wie implementiert Stackoverflow den veränderbaren Textbereich?Ein resizierbares Textfeld implementieren?

Ist das etwas, das sie selbst gerollt haben oder ist es eine öffentlich verfügbare Komponente, die ich leicht an Textareas auf meinen Seiten anhängen kann?

Ich habe diese Frage gefunden und es tut nicht ganz, was ich will.

autosizing-textarea

, die mehr über automatisch Ändern der Größe Textbereiche spricht, während ich den kleinen Grab-Bereich will, dass Sie und nach unten ziehen können.

Antwort

25

StackOverflow verwendet ein jQuery-Plugin, um dies zu erreichen: TextAreaResizer.

Es ist einfach genug, dies zu überprüfen - ziehen Sie einfach the JS Dateien von der Website.

Historische Anmerkung: wenn diese Antwort ursprünglich geschrieben wurde, WMD und TextAreaResizer waren zwei separate Plugins, weder von denen einer von dem SO Dev Team erstellt wurde (siehe auch: micahwittman's answer). Auch das JavaScript für die Website war ziemlich einfach zu lesen ... Keine davon sind streng wahr mehr, aber TextAreaResizer funktioniert immer noch gut.

+0

Interessant. Ich frage mich, ob es ein Prototyp-Äquivalent gibt. –

+0

Für den Fall, dass sich jemand auch das fragt: http://scottmoon.com. 08.08.2008/unobtrusive-javascript-expandable-texttareas/ – mplungjan

+1

Leider ist der Link zu UserVoice tot (da SO ihn nicht mehr benutzt) . Es wäre interessant, die Diskussion zu sehen, was die Leute darüber denken (manuelle Größenänderung vs. automatische Größenanpassung). –

4

Zuerst glaubte ich, es war ein eingebautes Feature der Wysiwym Markdown editor, aber Shog9 ist richtig: Es ist überhaupt nicht eingebacken, aber ist mit freundlicher Genehmigung von dem jQuery-Plugin TextAreaResizer (ich wurde vom Browser irregeführt) zu überprüfen, auf die editor demo, weil Google Chrome selbst die erweiterbare Funktionalität auf Textareas — ähnlich wie der Safari-Browser hinzugefügt wird).

+0

Ähm ... nein, ist es nicht. – Shog9

+0

Shog9 ist direkt an. Dies ist überhaupt nicht im WMD-Editor. –

+0

Nizza bearbeiten. Ich habe meinen Downvote entfernt. –

11

Ich brauchte in letzter Zeit eine ähnliche Funktionalität. Es heißt Autogrow und es ist ein Plugin der erstaunlichen jQuery Bibliothek

+3

Dieser schlägt alle anderen, die ich ausprobiert habe! Sehr empfehlenswert! – Ryall

+1

Es scheint, dass die Verbindung zum Autogrow unterbrochen ist. Richtig ist: http://plugins.jquery.com/project/autogrowtextarea – dpavlin

+0

Dieser tut gut. – San

0

Mit AngularJS:

angular.module('app').directive('textarea', function() { 
    return { 
    restrict: 'E', 
    controller: function($scope, $element) { 
     $element.css('overflow-y','hidden'); 
     $element.css('resize','none'); 
     resetHeight(); 
     adjustHeight(); 

     function resetHeight() { 
     $element.css('height', 0 + 'px'); 
     } 

     function adjustHeight() { 
     var height = angular.element($element)[0] 
      .scrollHeight + 1; 
     $element.css('height', height + 'px'); 
     $element.css('max-height', height + 'px'); 
     } 

     function keyPress(event) { 
     // this handles backspace and delete 
     if (_.contains([8, 46], event.keyCode)) { 
      resetHeight(); 
     } 
     adjustHeight(); 
     } 

     $element.bind('keyup change blur', keyPress); 

    } 
    }; 
}); 

Dies wird alle Textfelder verwandeln wachsen/schrumpfen. Wenn Sie nur bestimmte Textareas vergrößern/verkleinern möchten, ändern Sie den oberen Teil wie folgt:

angular.module('app').directive('expandingTextarea', function() { 
    return { 
    restrict: 'A', 

Hoffe, dass hilft!

-1

was dazu, seine Arbeit

<textarea oninput='this.style.height = "";this.style.height = this.scrollHeight + "px"'></textarea> 
+0

Während dieses Code-Snippet die Frage lösen kann, [hilft eine Erläuterung] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) hilft wirklich, die Qualität Ihres Posts zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in der Zukunft beantworten, und diese Leute könnten die Gründe für Ihren Codevorschlag nicht kennen. –