急!在线等! js或css设置input或textarea的高度自动适应文本内容长度
使用js或css设置input或textarea的高度自动适应文本内容长度,以便在input或textarea中全部显示文本内容。
很急,请各位大侠赐教!! java css html
[解决办法]
设置样式
overflow: visible;
[解决办法]
设置一个隐藏div用来获得input或textarea内容,给input或textarea加个keydown事件,用来获得隐藏div的宽高度试试
[解决办法]
2楼正解。
时时把输入框中的内容复制到一个pre标签内部,让浏览器自己计算pre的高度,然后我们用js去获取pre的高度,回头设置给该textarea即可。
这里必须保证pre的字体大小、行高和宽度等要和textarea的一致。
[解决办法]
可以把输入框的样式调到只有光标看得见的地步,然后插入到span#content里面,这样做的就和真的一样了。
[解决办法]
再给你一个修正版,我在ie10下测试过,别的估计问题也不大。因为不兼容的地方只有event。
元素也重新布局,做成控件的话更结构更合理。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>js demo</title>
<style type="text/css">
#contentWrap{
border: solid #ccc 1px;
line-height: 30px;
padding: 5px 0;
padding-right: 25px;
/*需要指定输入框和内容span的字体一致,*/
font-size: 12px;
font-family: arial;
}
#input{
margin-left: 0;
width:10px;
border: none;
/*否则输入框会默认使用不一样的字体*/
font-size: 12px;
font-family: arial;
padding: 0;
}
</style>
</head>
<body>
<span id="contentWrap"><span id="content"></span><input id="input" /></span>
</body>
</html>
<script>
var inputEl = document.getElementById('input');
var contentWrapEl = document.getElementById('contentWrap');
var contentEl = document.getElementById('content');
contentWrapEl.onclick=function(){
inputEl.focus();
}
inputEl.onkeydown = function(e){
if(typeof(event)!='undefined'){
e = event;
}
if(e.keyCode==8){
var text = contentEl.innerHTML;
var len = text.length;
if(len==0){
return;
}
contentEl.innerHTML = text.substring(0, len-1);
return;
}
contentEl.innerHTML = contentEl.innerHTML + inputEl.value;
inputEl.value = '';
// 根据具体业务需求,还需要处理很多事件,比如
// 还需要处理选中效果,光标插入效果
// 还需要提供一个隐藏域,用它保存输入的值,便于form提交。
}
</script>