Basierend auf Michaels Antwort habe ich mit jQuery eine eigene Version davon erstellt. Ich denke, es ist eine sauberere / kürzere Version der meisten Antworten hier und es scheint die Arbeit zu erledigen.
Ich mache das Gleiche wie die meisten Leute hier, indem ich eine Spanne benutze, um den Eingabetext zu schreiben und dann die Breite zu erhalten. Dann stelle ich die Breite ein, wenn die Aktionen keyup
undblur
aufgerufen werden.
Hier ist ein funktionierender Codepen . Dieser Codepen zeigt, wie dies mit mehreren Eingabefeldern verwendet werden kann.
HTML-Struktur:
<input type="text" class="plain-field" placeholder="Full Name">
<span style="display: none;"></span>
jQuery:
function resizeInputs($text) {
var text = $text.val().replace(/\s+/g, ' '),
placeholder = $text.attr('placeholder'),
span = $text.next('span');
span.text(placeholder);
var width = span.width();
if(text !== '') {
span.text(text);
var width = span.width();
}
$text.css('width', width + 5);
};
Die obige Funktion ruft den Eingabewert ab, schneidet die zusätzlichen Leerzeichen ab und setzt den Text in den Bereich, um die Breite zu erhalten. Wenn kein Text vorhanden ist, wird stattdessen der Platzhalter abgerufen und in den Bereich eingegeben. Sobald der Text in den Bereich eingegeben wurde, wird die Breite der Eingabe festgelegt. Die + 5
auf die Breite ist, weil ohne das die Eingabe im Edge-Browser ein kleines Stück abgeschnitten wird.
$('.plain-field').each(function() {
var $text = $(this);
resizeInputs($text);
});
$('.plain-field').on('keyup blur', function() {
var $text = $(this);
resizeInputs($text);
});
$('.plain-field').on('blur', function() {
var $text = $(this).val().replace(/\s+/g, ' ');
$(this).val($text);
});
Wenn dies verbessert werden könnte, lassen Sie es mich bitte wissen, da dies die sauberste Lösung ist, die ich finden könnte.