要计算当前输入的宽度,您必须将其嵌入到一个临时span
元素中,将该东西附加到 DOM,使用该scrollWidth
属性获取计算出的宽度(以像素为单位)并span
再次删除。当然,您必须确保input
在 和span
元素中使用相同的字体系列、字体大小等。因此,我为他们分配了相同的class。
我将函数附加到keyup
事件中,因为keypress
输入字符尚未添加到 input 中value
,因此将导致错误的宽度。不幸的是,我不知道如何摆脱输入字段的滚动(在字段末尾添加字符时);它滚动,因为在adjustWidthOfInput()
调用之前添加并显示了字符。而且,如上所述,我不能反过来这样做,因为那样您将在插入按下的字符之前获得输入字段的值。我稍后会尝试解决这个问题。
顺便说一句,我只在 Firefox (3.6.8) 中测试过这个,但我希望你会明白这一点。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Get/set width of <input></title>
<style>
body {
background: #666;
}
.input-element {
border: 0;
padding: 2px;
background: #fff;
font: 12pt sans-serif;
}
.tmp-element {
visibility: hidden;
white-space: pre;
}
</style>
</head>
<body>
<input id="theInput" type="text" class="input-element" value="1">
<script>
var inputEl = document.getElementById("theInput");
function getWidthOfInput() {
var tmp = document.createElement("span");
tmp.className = "input-element tmp-element";
tmp.innerHTML = inputEl.value.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>');
document.body.appendChild(tmp);
var theWidth = tmp.getBoundingClientRect().width;
document.body.removeChild(tmp);
return theWidth;
}
function adjustWidthOfInput() {
inputEl.style.width = getWidthOfInput() + "px";
}
adjustWidthOfInput();
inputEl.onkeyup = adjustWidthOfInput;
</script>
</body>
</html>