2011-01-11 12 views

Respuesta

8

Tal vez alguien tiene una mejor manera, pero se puede intentar esto:

Ejemplo: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; 
}; 

Esto establece en un tamaño mínimo de 10 y se expande si vas más allá de 10 caracteres.

funciona Probablemente es mejor con una fuente de ancho fijo:

input { 
    font-family:Courier; 
} 
+0

no funciona para caracteres CJK. –

+1

Versión más concisa de la función: 'this.size = Math.max (this.value.length, 10);' – Meisner

12

Deje el navegador haga el cálculo de la anchura mediante el uso de un conjunto div con contenteditable a true.

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

No debe haber problemas con el apoyo del navegador http://caniuse.com/#feat=contenteditable

3

También puede crear div elemento, copiar su estilo de entrada a ella y utilizar sus dimensiones para cambiar el tamaño de entrada. (Elegido múltiples usos 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: mejor usar pre en lugar de div para seguir el tamaño de los espacios.

+0

¡Gracias por esta solución! Sin embargo, no tiene en cuenta los espacios en blanco consecutivos. Edité tu publicación y agregué "white-space: pre" al dummy div. Además, es posible que se necesite un ancho adicional de algunos píxeles para evitar que el cursor desaparezca. – Kafoso

Cuestiones relacionadas