根据迈克尔的回答,我使用jQuery创建了自己的版本。我认为这是大多数答案的较简洁的版本,似乎可以完成工作。
通过使用跨度将输入文本写入然后获取宽度,我与大多数人在做同样的事情。然后在设置动作keyup
和blur
调用时设置宽度。
这是工作 codepen。该代码笔显示了如何将其与多个输入字段一起使用。
HTML结构:
<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);
};
上面的函数获取输入值,修剪多余的空格并将文本设置为span以获取宽度。如果没有文本,则改为获取占位符,然后将其输入到跨度中。一旦将文本输入到跨度中,它将设置输入的宽度。的+ 5
上宽度,因为没有了输入被切断的边缘浏览器一点点。
$('.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);
});
如果可以改进,请告诉我,因为这是我能想到的最干净的解决方案。