2011-01-11 15 views
9

Ich interessiere mich nicht für eine bestimmte Technologie, es könnte JS, CSS oder sogar einige unstandardmäßige und böse HTML-Attribute sein. Ich möchte nur die input größer werden, wenn der Benutzer über die rechte Grenze eingibt.Größe ändern Eingang zu seinem Inhalt

Antwort

8

Vielleicht hat jemand anderes hat eine bessere Art und Weise, aber man könnte versuchen, diese:

Beispiel:http://jsfiddle.net/aAueA/1/

var input = document.getElementsByTagName('input')[0]; 

input.onkeypress = input.onkeydown = function() { 
    this.size = (this.value.length > 10) ? this.value.length : 10; 
}; 

Dies setzt es bei einer Mindestgröße von 10 und dehnt sich, wenn Sie über 10 gehen Figuren.

Wahrscheinlich funktioniert am besten mit einer Schrift mit fester Breite:

input { 
    font-family:Courier; 
} 
+0

funktioniert es nicht für CJK-Zeichen. –

+1

Konzise Version der Funktion: 'this.size = Math.max (this.value.length, 10);' – Meisner

12

Lassen Sie den Browser, um die Berechnung der Breite tun durch ein div mit contenteditable Set true verwenden.

<div class="pseudo-input" contenteditable="true">Resizes to my content!</div> 

Es sollte keine Probleme sein mit Browser-Unterstützung http://caniuse.com/#feat=contenteditable

3

Sie können auch div Element erstellen, kopieren Sie Ihre Eingabemethode, um es und es zu verwenden, Abmessungen ist Eingabe zu ändern. (Ausgewählte Mehrfachverwendungen this solution).

var input = $('input'), 
    dummy = $('<div style="position:absolute; left: -1000%;">').appendTo('body'); 

['font-size', 'font-style', 'font-weight', 'font-family', 
'line-height', 'text-transform', 'letter-spacing'].forEach(function(index) { 
    dummy.css(index, input.css(index)); 
}); 

input.on('input', function() { 
    dummy.html(this.value); 
    input.width(dummy.width()); 
}); 

UPD: besser vor zu verwenden, anstatt div Räume Größe zu folgen.

+0

Danke für diese Lösung! Es berücksichtigt jedoch nicht aufeinanderfolgende Whitespace-Zeichen. Ich habe deinen Beitrag bearbeitet und "white-space: pre" zum div-Dummy hinzugefügt. Außerdem können einige Pixel zusätzliche Breite erforderlich sein, um zu vermeiden, dass das Caret verschwindet. – Kafoso

Verwandte Themen