我有这个简单的代码:
<input type="text" value="Some Extremely Really Long Word" />
如何确保值(在本例中为“一些非常长的单词”)完全显示(即没有被剪裁)。
我尝试应用样式:overflow:visible 和 display:nowrap 但它不起作用。
我不想应用这样的样式:width: 200px,因为我不知道单词会有多长。
小提琴:http: //jsfiddle.net/TfKbp/3/
我有这个简单的代码:
<input type="text" value="Some Extremely Really Long Word" />
如何确保值(在本例中为“一些非常长的单词”)完全显示(即没有被剪裁)。
我尝试应用样式:overflow:visible 和 display:nowrap 但它不起作用。
我不想应用这样的样式:width: 200px,因为我不知道单词会有多长。
小提琴:http: //jsfiddle.net/TfKbp/3/
我过去使用它来动态地将文本INPUT
的宽度扩展到其内容的宽度。基本上,您创建一个SPAN
具有完全相同的字体系列、字体大小等,并使用该keypress
事件来添加字符、测量其大小并调整INPUT
.
编辑 1
要根据其初始值动态调整文本框的大小,只需要多一点代码...
HTML
<input id="txtLong" type="text" value="What does the fox say? Ring-ding-ding-ding-dingeringeding! Gering-ding-ding-ding-dingeringeding! Gering-ding-ding-ding-dingeringeding! What the fox say?" />
<span id="spanLong" style="display: none;"></span>
JavaScript
var txtLong = $("#txtLong");
var spanLong = $("#spanLong");
spanLong.text(txtLong.val());
txtLong.css("width", spanLong.width());
txtLong.keypress(function(e){
if (e.which !== 0 && e.charCode !== 0) {
var char = String.fromCharCode(e.keyCode | e.charCode);
spanLong.text(txtLong.val() + char);
txtLong.css("width", spanLong.width());
}
});
CSS
input, span {
padding: 2px 3px;
font-size: 11px;
font-family: Sans-serif;
white-space: pre;
}
编辑 2
由于您正在寻找一种通过单击来选择文本的方法,因此我想我还要指出您不一定需INPUT
要这样做。看看这个 JSFiddle。作为额外的奖励,它不使用 JQuery。我知道你有点反对。
编辑 3
通过改编这篇博文,我找到了一种仅使用纯 JavaScript 将文本框调整为其初始值宽度的方法。
HTML
<input type="text" id="txtLong" value="Some very long text that all needs to show"/>
<span id="ruler"></span>
JavaScript
String.prototype.visualLength = function()
{
var ruler = document.getElementById("ruler");
ruler.innerHTML = this;
return ruler.offsetWidth;
}
window.onload = function() {
var txtLong = document.getElementById("txtLong");
var width = txtLong.value.visualLength();
txtLong.setAttribute("style", "width:" + width + "px");
}
CSS
#ruler {
visibility: hidden;
white-space: nowrap;
}
#txtLong, #ruler {
font-family: sans-serif;
font-size: 11pt;
}
没有声明方式(我知道)可以做到这一点,但使用 jQuery 很容易做到。您基本上需要做的是制作第二个元素(不是input
),其中包含与input
. 然后测量第二个元素的宽度,并将宽度设置input
为该新宽度。
下面是你如何做到这一点:
HTML:
<input type='text' value='Some Extremely Really Long Word' id='my-input' />
jQuery:
$(document).ready(function() {\
var $input = $('#my-input'),
$clone = $('<div></div>');
$clone.html($input.val());
$clone.css({
whiteSpace: 'nowrap',
font: $input.css('font'),
paddingLeft: $input.css('padding-left'),
paddingRight: $input.css('padding-right')
});
$clone.appendTo($('body'));
$input.css({
width: $clone.width();
});
$clone.remove();
})