2011-01-11 16 views

Odpowiedz

8

Może ktoś ma lepszy sposób, ale można spróbować to:

Przykład: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; 
}; 

ten ustawia go w minimalnej wielkości 10 i rozszerza jeśli wykracza poza 10 postacie.

Prawdopodobnie najlepiej o stałej szerokości czcionki:

input { 
    font-family:Courier; 
} 
+0

to nie działa dla znaków CJK. –

+1

Bardziej zwięzła wersja funkcji: 'this.size = Math.max (this.value.length, 10);' – Meisner

12

Niech przeglądarka zrobić obliczeń szerokości za pomocą div z contenteditable zestaw do true.

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

Nie powinno być żadnych problemów z obsługą przeglądarki http://caniuse.com/#feat=contenteditable

3

Można również utworzyć elementu div, skopiuj swój styl wejścia do niego i używać jego wymiarów do rozmiaru wejście. (Wybrane wielokrotne zastosowania 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: lepiej używać pre zamiast div, aby śledzić wielkość spacji.

+0

Dzięki za to rozwiązanie! Nie uwzględnia jednak kolejnych białych znaków. Edytowałem twój post i dodałem "white-space: pre" do manekina div. Również kilka pikselów o większej szerokości może być konieczne w celu uniknięcia zniknięcia kreski. – Kafoso

Powiązane problemy