Wie wird die Breite eines HTML-Eingabeelements berechnet, so dass es der Größe seines Inhalts entspricht?

8

Wie berechnet man die Breite eines Eingabe-HTML-Elements, so dass es mit der Größe seines Inhalts übereinstimmt? Ich aktualisiere eine Eingabe im laufenden Betrieb, wenn der Benutzer Folgendes eingibt:

%Vor%

Das scheint jedoch nicht ganz korrekt zu sein, weil es nicht berücksichtigt, dass einige Zeichen länger sind als andere:

  • Ich werde mehr und mehr Whitespace bekommen, wenn ich nur einige "l" Zeichen eintippe
  • Die Größe wird nicht ausreichen, wenn ich nur einige "w" Zeichen
  • eintippe

Wie geht es weiter?

PS: Warum möchte ich das machen (schon beantwortet in einer Antwort, die gelöscht wurde)? Ich habe Sätze, in denen ich den Klammerinhalt durch Eingaben ersetzen muss (zB: [Benutzer] ist [Jahre] alt). Ich habe keine Ahnung, was der Satz sein kann, daher kenne ich keine ausreichende Länge für die Eingaben und möchte sie in einer Zeile lesbar halten (zu viel Leerzeichen vermeiden).

    
JB Hurteaux 31.05.2012, 12:36
quelle

4 Antworten

4

Sie können eine (versteckte) Leinwand und die measureText() Methode des Kontexts verwenden, um die Breite der Zeichenfolge zu erhalten.

BEARBEITEN:

Sieht schnell genug aus.

    
dda 31.05.2012 12:43
quelle
3

Definieren Sie zuerst einige CSS ...

%Vor%

... dann benutze ein bisschen JavaScript ...

%Vor%

jsFiddle .

Sie sollten auch eine sinnvolle Startbreite für Ihr input Element wählen.

    
alex 31.05.2012 12:44
quelle
2

Wenn jQuery kein Problem ist, hier ist eine Demo, die ich auf jsFiddle zusammengestellt habe. Es verwendet eine Autoexpand.js -Datei, die das tut, was Sie wollen. Schau dir das letzte Beispiel in der Geige an.

Einige Besonderheiten:

  1. Es basiert auf .keyup und .keypress für die schnellste Antwort möglich.
  2. Es berücksichtigt das HTML-Markup, das in das Feld eingefügt wird. Dinge wie Zeilenumbrüche werden behandelt.
  3. Die Quelldatei zeigt eine intelligente Verarbeitung, indem alles über die Schriftart berücksichtigt wird.

Ebenfalls in der jsFiddle enthalten sind Links zum Herunterladen einer Pastebin-Version der Fiddle, da jsFiddle Sandbox in IE8 bricht. Das heißt, es funktioniert auch in IE7!

    
arttronics 02.06.2012 07:35
quelle
0

Erstens: Fügen Sie dieses div hinzu, wo Sie möchten

%Vor%

Zweitens: Verwenden Sie diese Funktion

%Vor%     
aDDin 30.07.2016 07:04
quelle