我有一个输入类型文本
<input type="text" id="txtid">
当我开始在input中输入文本时,我应该能够获得输入文本的长度。
这就是我所尝试的:
document.getElementById("txtid").offsetWidth;
和/或
var test = document.getElementById("txtid");
var width = (test.clientWidth + 1) + "px";
这两个并没有给予输入文本的宽度
基本上我想要的是:
假设input text
的宽度是320px
。我需要输入的文本宽度,即120px
,当我输入时,它会不断变化。
6条答案
按热度按时间2exbekwf1#
我看到了两种方法。
第一个:
您可以使用内容可编辑的div代替input。这样你就可以看到div的宽度。
注意:就像@Leon Adler说的,这种方式允许从其他程序粘贴图像,表格和格式。因此,您可能需要使用JavaScript进行一些验证,以便在获取大小之前检查内容。
第二次:
使用输入类型文本并将内容粘贴到不可见的div中。你可以看到不可见的div的宽度。
注意:
input
和div
标签的字体和字号必须相同。hgncfbus2#
我稍微修改了冷却器的答案,因为看起来你想要的是宽度而不是字母数。我已经创建了一个跨度,这是绝对定位的屏幕。然后我将输入的值添加到它,然后得到跨度的宽度。为了使它更花哨,你可以用javascript创建span。
请注意,输入和span必须具有相同的CSS样式,这样才能准确。
xdyibdwo3#
Canvas
measureText()
方法在这种情况下可能会有所帮助。每当需要获取文本宽度时,请调用以下函数:为了获得更准确的结果,您可以为画布设置字体样式,特别是在为输入设置某些字体属性时。使用以下函数获取输入字体:
然后,将这一行添加到第一个函数:
gpfsuwkq4#
更新
我想提出两点
offsetWidth
。我们可以使用visibility: hidden;
或opacity:0
来实现。overflow:auto
添加到隐藏的span
中,否则文本将被扭曲到下一行,如果它超过浏览器窗口宽度,宽度将保持固定(* 窗口宽度 *)旧
你可以试试这种方法
添加跨度并隐藏它
<span id="value"></span>
然后
onkeyup
将textfield
的文本添加到隐藏的span上并获得其宽度。在杰奎里的帮助下
快照(* 已更新 *)
仅使用JS
快照(* 已更新 *)
lmvvr0a85#
使用上面的解决方案,我把它变成了一个单一的功能。
inkz8wg96#
以下是我的方法:
我创建了一个假的'span'元素,它复制输入元素的所有字体样式,然后测量它的宽度