Wie autosize eine textarea mit Prototyp?
Zur Zeit arbeite ich an einer internen sales-Anwendung für die Firma für die ich arbeite, und ich habe eine form, die dem Benutzer ermöglicht, die Lieferanschrift zu ändern.
Nun ich denke, es würde viel schöner Aussehen, wenn die textarea-ich bin für die Haupt-Email-Adresse-details, würde nur dauern, bis die Gegend der text in ihm, und automatisch verkleinern, wenn der text geändert wurde.
Hier ist ein screenshot des derzeit.
Irgendwelche Ideen?
@Chris
Einen guten Punkt, aber es gibt Gründe, warum ich wollen, es zu ändern. Ich möchte den Bereich dauert es, bis der Bereich, der die darin enthaltenen Informationen. Wie man sehen kann im Screenshot, wenn ich eine Feste textarea, es dauert, bis eine faire wack vertikalen Raum.
Ich kann, reduzieren Sie die schriftart, aber ich brauche Adresse werden groß und gut lesbar. Jetzt kann ich die verringern Sie die Größe der text-Bereich, aber dann habe ich Probleme mit Menschen, die eine Adresszeile, die dauert 3 oder 4 (man nimmt 5) Linien. Benötigen, um die Benutzer eine Bildlaufleiste ist ein wichtiger no-no.
Denke ich, sollte ich ein bisschen genauer sein. Ich bin nach der vertikale skalieren und die Breite spielt keine Rolle, wie viel. Das einzige problem, das passiert, ist die ISO-Zahl (die große "1") gedrängt unter der Adresse, wenn die Fensterbreite zu klein (wie man auf dem screenshot erkennen kann).
Es geht nicht um eine gimick; es geht darum, ein Textfeld, das der Benutzer Bearbeiten kann, dass nicht unnötiger Speicherplatz, sondern alle den text in dem Textfeld.
Aber wenn jemand kommt mit einer anderen Herangehensweise an das problem das ich offen zu.
Ich geändert habe den code ein wenig, weil es tätig war, ein wenig seltsam. Ich geändert es zu aktivieren, keyup, denn es würde nicht berücksichtigen, den Charakter, das war nur getippt.
resizeIt = function() {
var str = $('iso_address').value;
var cols = $('iso_address').cols;
var linecount = 0;
$A(str.split("\n")).each(function(l) {
linecount += 1 + Math.floor(l.length / cols); //Take into account long lines
})
$('iso_address').rows = linecount;
};
- Können Sie erstellen eine demo-Website, wo wir sehen, das bei der Arbeit?
- dieses plugin scheint gut zu sein jacklmoore.com/autosize
- Gibt es ein JQuery-Version? Wie der Zugriff auf die Spalten und Zeilen einer TextArea in JQuery?
- Fast das gleiche, aber mit der ausdrücklichen Voraussetzung, dass sollte kleiner werden, wenn der text entfernt wird: stackoverflow.com/questions/454202/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Facebook tut es, wenn Sie schreiben: auf die Wände, sondern nur die Größe vertikal.
Horizontale Größe scheint mir für ein Durcheinander, wegen word-wrap lange Zeilen, und so weiter, aber die vertikale Größe scheint zu sein, ziemlich sicher und schön.
Keiner der Facebook-Nutzung-Neulinge die ich kenne, haben jemals erwähnt, dass nichts über es oder verwechselt worden. Ich würde dies als anekdotische Beweise, um zu sagen: "go ahead, es umzusetzen'.
Einige JavaScript-code, es zu tun, mit Prototyp (denn das ist, was ich bin vertraut mit):
PS: Offensichtlich ist dieser JavaScript-code ist sehr naiv und nicht gut getestet, und Sie wahrscheinlich nicht wollen, es zu benutzen für die Textfelder mit Romanen, die in Ihnen, aber Sie bekommen die Allgemeine Idee.
<textarea cols='5'>0 12345 12345 0</textarea>
. (Schrieb ich eine fast identische Umsetzung und nicht fangen diese erst nach einem Monat, es zu benutzen.) Es auch nicht für leere Zeilen.Einer Verfeinerung einige dieser Antworten ist lassen Sie CSS mehr von der Arbeit.
Der normale Weg zu sein scheint:
textarea
und eine verstecktediv
textarea
's Inhalte synchronisiert sich mitdiv
'sdiv
wir vermeidendurch explizites festlegen der
textarea
's Höhe.JS:
CSS:
HTML:
resize:none;
im style der textarea!var text = $("#textArea").val().replace(/\n/g, '<br/>') + ' ';
stellt sicher, dass Sie nicht bekommen, ruckartige Verhalten, wenn man von eine neue, leere Zeile an das Ende der textarea auf eine nicht-leere, da die versteckten div-macht Sie sicher, wrap der nbsp.Hier ist eine weitere Technik für die automatische Skalierung der Seiten eine textarea.
Code:
(plain-vanilla-JavaScript)
Demo:
(verwendet jQuery, Ziele auf die textarea-ich tippe in der rechten jetzt - wenn Sie Firebug installiert, das einfügen von samples in die Konsole und den test auf dieser Seite)
clientHeight
undscrollHeight
gleich sind, so dass Sie können nicht diese Methode verwenden, wenn Sie möchten, dass Ihre textarea zu schrumpfen als auch wachsen.if (text.clientHeight == text.scrollHeight) text.style.height = "20px";
Wahrscheinlich die kürzeste Lösung:
Diese Weise brauchen Sie nicht alle versteckten divs oder irgendetwas wie das.
Hinweis: möglicherweise haben Sie zu spielen mit
this.style.height = (this.scrollHeight) + "px";
je nachdem, wie Sie den Stil der textarea (line-height, padding und solche Sachen).keyup
könnte genug sein, aber ich bin mir nicht sicher. Ich war so glücklich, dass ich es herausgefunden, dass ich aufgehört habe zu versuchen etwas anderes.Hier ein Prototyp version der Größenanpassung eines text-Bereich, dass ist nicht abhängig von der Anzahl der Spalten des textarea. Dies ist eine hervorragende Technik, denn es ermöglicht Ihnen die Kontrolle der Textbereich über CSS als auch variable Breite der textarea. Darüber hinaus ist diese version zeigt die Anzahl der verbleibenden Zeichen. Während nicht gewünscht, es ist eine ziemlich nützliche Funktion und ist leicht zu entfernen, wenn unerwünscht.
Erstellen Sie das widget durch den Aufruf
new Widget.Textarea('element_id')
. Die Standardeinstellungen können überschrieben werden, indem Sie als ein Objekt, z.B.new Widget.Textarea('element_id', { max_length: 600, min_height: 50})
. Wenn Sie möchten, um es zu schaffen, die für alle Texteingabefelder auf der Seite, etwas zu tun:Hier ist eine Lösung mit
JQuery
:abc
ist einteaxtarea
.Überprüfen Sie den untenstehenden link:
http://james.padolsey.com/javascript/jquery-plugin-autoresize/
Nur der Rückgriff auf diese, ich habe es ein wenig aufgeräumter (obwohl jemand, der die volle Flasche auf Prototyp/JavaScript konnten Verbesserungen vorschlagen?).
Einfach aufrufen mit:
Habe ich so etwas auch ganz einfach. Zuerst legte ich die TextArea in ein DIV. Zweite, die ich genannt habe, auf der
ready
- Funktion, um dieses Skript.Einfach. Es ist die maximale Höhe des div-sobald es gemacht wird, geteilt durch die Höhe einer TextArea von einer Zeile.
Brauchte ich diese Funktion für mich, aber keine von denen, die von hier aus gearbeitet, als ich Sie brauchte.
So habe ich Orion code und verändert es.
Fügte ich in einer Mindesthöhe, so dass auf den zu zerstören es nicht zu klein.
Wie die Antwort von @memical.
Aber ich fand einige Verbesserungen. Sie können die jQuery -
height()
Funktion. Aber bewusst sein, padding-top und padding-bottom Pixel. Ansonsten wird Ihr textarea wird zu schnell wachsen.Meine Lösung nicht die Verwendung von jQuery (weil Sie manchmal nicht die gleiche Sache) ist unten. Es wurde allerdings nur getestet Internet Explorer 7, so kann die Gemeinschaft darauf hin, alle die Gründe, warum dies falsch ist:
So weit ich mag, wie es funktioniert, und ich Sorge mich über die anderen Browser, also werde ich wohl für alle meine Texteingabefelder:
Hier ist eine Erweiterung der Prototyp-widget, dass Jeremy geschrieben am 4. Juni:
Es Stoppt die Benutzer von der Eingabe von mehr Zeichen an, wenn Sie mit Grenzen in Texteingabefelder. Es wird geprüft, ob Zeichen vorhanden sind Links. Wenn der Benutzer kopiert text in die textarea schreiben, der text ist abgeschnitten bei der max. Länge:
@memical hatten eine tolle Lösung für die Einstellung der Höhe der textarea-Komponente auf pageload mit jQuery, aber für meine Anwendung, die ich wollte in der Lage sein zu erhöhen die Höhe der textarea als Benutzer Hinzugefügt, mehr Inhalt. Ich baute aus memical Lösung mit der folgenden:
Es ist nicht sehr glatt, aber es ist auch nicht eine client-orientierte Anwendung, so dass Glätte nicht wirklich wichtig. (Hatte dies mit Kundenkontakt, hätte ich wahrscheinlich nur ein auto-resize jQuery-plugin.)
Für diejenigen, die das Programmieren für den IE und auf dieses problem stoßen. IE hat einen kleinen trick, der macht es zu 100% CSS.
Können Sie auch einen Wert für rows="n", die der IE ignorieren, aber auch andere Browser verwenden. Ich hasse Codierung, die IE-hacks, aber diese hier ist sehr hilfreich. Es ist möglich, dass es funktioniert nur im Quirks-Modus.
Internet Explorer, Safari, Chrome und Opera müssen die Benutzer daran erinnern, um explicidly setzen Sie den line-height Wert im CSS. Ich mache ein stylesheet legt die anfängliche Eigenschaften für alle Textfelder wie folgt aus.
Hier ist eine Funktion, die ich einfach schrieb in jQuery zu tun - Sie können die Portierung auf Prototyp, aber Sie unterstützen nicht die "ausführen, um liveness" von jQuery, so dass Elemente Hinzugefügt, die von Ajax-Anfragen nicht reagieren.
Diese version erweitert nicht nur, sondern es auch Verträge, wenn delete oder backspace gedrückt wird.
Diese version basiert auf jQuery 1.4.2.
Genießen 😉
http://pastebin.com/SUKeBtnx
Verwendung:
oder (beliebige jQuery-Selektor zum Beispiel)
Getestet wurde es auf Internet Explorer 7/Internet Explorer 8, Firefox 3.5 und Chrome. Alles Prima funktioniert.
Verwenden ASP.NET einfach nur dies: