【发布时间】:2016-09-15 23:44:14
【问题描述】:
所以,我有一个input,我希望它根据其内容调整其width。现在,我使用这样的代码:
var adjustWidthToContent = function()
{
var inputLength = $(this).val().length;
// the minimum 1em width allows to start typing when the input is empty
$(this).width(Math.max(1, inputLength*0.7) + "em");
};
$("input").on("input",adjustWidthToContent);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<input type='text' />
这适用于桌面,但我想让它更准确(0.7 系数是一个“hacky”系数,计算实际宽度的系数对于不同的符号显然不同)。尝试键入多个符号:您会发现差距越来越大。修复这对于我不希望任何额外空间被input 元素的空白部分占用的移动界面特别有用。
显然,我需要使用不同于inputLength 的东西。如何获得 input 内文本的“实际”宽度?
PS 这是我根据建议使用的:
$.fn.textWidth = function () {
if (!$.fn.textWidth.fakeEl)
$.fn.textWidth.fakeEl = $('<span>').hide().appendTo(document.body);
$.fn.textWidth.fakeEl.text(this.val() || this.text()).css('font', this.css('font'));
return $.fn.textWidth.fakeEl.width();
};
var adjustWidthToContent = function()
{
var textWidth = jQuery(this).textWidth();
var defaultWidth = 20;
$(this).width( (textWidth || defaultWidth) + 'px');
};
$("input").on("input",adjustWidthToContent).trigger("input");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<input type='text' />
不过,PPS 确实需要对 adjustWidthToContent 进行一些详细说明才能适用于这么多个文本字段。
【问题讨论】:
-
一个词:等宽。
标签: javascript jquery html