jQuery 调整文本框大小以适应内容

Posted

技术标签:

【中文标题】jQuery 调整文本框大小以适应内容【英文标题】:jQuery resize text box to fit contents 【发布时间】:2020-04-14 09:14:04 【问题描述】:

我有一个带有文本框的表单,这些文本框的大小可以变化很大。我正在尝试根据它们的内容调整它们的大小。

我一直在使用各种解决方案,并将其归结为:

$("input[type=text]").width($(this).val().length)   

在我看来,这应该可行。有人可以告诉我为什么没有吗?谢谢。

【问题讨论】:

【参考方案1】:

它可以工作,但默认情况下使用 .width(parameter) 会自动将参数转换为像素。所以使用 .length 只会给你 1 个字符 = 1 个像素。

试试下面的演示,我添加了另一个输入字段,它使用乘法来进一步添加/指定每个字符输入的长度;

$("input[type=text]").on("keypress", function() 
  $(this).width($(this).val().length);
);

$("input[type=text].add").on("keypress", function() 
  $(this).width($(this).val().length * 8);
);
input 
  margin-bottom: 10px;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<input type="text" placeholder="Default" />

<br/>

<input class="add" type="text" placeholder="With Multiply" />

【讨论】:

【参考方案2】:

如果你根据文本长度计算宽度,当输入一些不同大小的字符时,解决方案可能会被打破。喜欢:wi

我的建议:从输入中获取值,将其添加到隐藏在 &lt;body&gt; 标签上的某个 div 中。根据div计算出文字宽度后,就可以更新输入宽度了。

$("input[type=text]").on('input', function (event) 
  var value = $(this).val();
  
  var div = $('<div>').text(value).appendTo('body');
  
  $(this).width(div.width());
);
div 
  position: absolute;
  visibility: hidden;
  font-size: 12px;
  font-family: Arial;


input 
  padding: 0 6px;
  font-size: 12px;
  font-family: Arial;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>

<input type="text" />

注意:div/input 的font-sizefont-family 属性必须相同。

【讨论】:

以上是关于jQuery 调整文本框大小以适应内容的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jQuery UI 插件使 html 文本框可拖动和调整大小?

KineticJS 调整文本大小以适应带有一些填充的矩形

组合框没有正确调整大小以适应更大的字体大小

前端jquery怎么限制文本框输入数字的大小

UILabel - 自动调整大小标签以适合文本?

如何通过使用 jQuery 拖动其右下角来调整文本输入框的大小(如 textarea)?