文本框根据输入内容自适应高度的代码


Posted in Javascript onOctober 24, 2011

其实现代浏览器大多都支持文本框尺寸调节功能,绝大多数情况下却没有自动适应来得爽快,在网络上发现一方法比较简单的实现文本框高度自适应,于是封装了这个函数,准备以后应用到项目中。
源代码:
23:03文章更新:
感谢alucelx同学再次给力的帮助,大大简化了方法,更新代码为0.2版本,同时解决了兼容Opera浏览器,至此全兼容IE6+与现代浏览器!
在线演示: http://demo.3water.com/js/2011/autoArea/index.htm
autoTextarea.js

/** 
* 文本框根据输入内容自适应高度 
* @author tang bin 
* @version 0.3 
* @see http://www.planeart.cn/?p=1489 
* @param {HTMLElement} 输入框元素 
* @param {Number} 设置光标与输入框保持的距离(默认20) 
* @param {Number} 设置最大高度(可选) 
*/ 
var autoTextarea = function (elem, extra, maxHeight) { 
extra = extra || 20; 
var isFirefox = !!document.getBoxObjectFor || 'mozInnerScreenX' in window, 
isOpera = !!window.opera && !!window.opera.toString().indexOf('Opera'), 
addEvent = function (type, callback) { 
elem.addEventListener ? 
elem.addEventListener(type, callback, false) : 
elem.attachEvent('on' + type, callback); 
}, 
getStyle = elem.currentStyle ? function (name) { 
var val = elem.currentStyle[name]; 
if (name === 'height' && val.search(/px/i) !== 1) { 
var rect = elem.getBoundingClientRect(); 
return rect.bottom - rect.top - 
parseFloat(getStyle('paddingTop')) - 
parseFloat(getStyle('paddingBottom')) + 'px'; 
}; 
return val; 
} : function (name) { 
return getComputedStyle(elem, null)[name]; 
}, 
minHeight = parseFloat(getStyle('height')); 
elem.style.maxHeight = elem.style.resize = 'none'; 
var change = function () { 
var scrollTop, height, 
padding = 0, 
style = elem.style; 
if (elem._length === elem.value.length) return; 
elem._length = elem.value.length; 
if (!isFirefox && !isOpera) { 
padding = parseInt(getStyle('paddingTop')) + parseInt(getStyle('paddingBottom')); 
}; 
scrollTop = document.body.scrollTop || document.documentElement.scrollTop; 
elem.style.height = minHeight + 'px'; 
if (elem.scrollHeight > minHeight) { 
if (maxHeight && elem.scrollHeight > maxHeight) { 
height = maxHeight - padding; 
style.overflowY = 'auto'; 
} else { 
height = elem.scrollHeight - padding; 
style.overflowY = 'hidden'; 
}; 
style.height = height + extra + 'px'; 
scrollTop += parseInt(style.height) - elem.currHeight; 
document.body.scrollTop = scrollTop; 
document.documentElement.scrollTop = scrollTop; 
elem.currHeight = parseInt(style.height); 
}; 
}; 
addEvent('propertychange', change); 
addEvent('input', change); 
addEvent('focus', change); 
change(); 
};

测试代码:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>文本框根据输入内容自适应高度</title>
<style type="text/css">
#textarea { font: 1.4em/1.8em Arial; overflow: hidden; width: 550px; height: 6em; padding:10px; }
</style>
<script src="autoTextarea.js"></script>
</head>
<body style="background:#FBFCFD url(http://goo.gl/kLsZX);">
<textarea id="textarea"></textarea>
<script>
var text = document.getElementById("textarea"),
tip = '想写点什么..';
autoTextarea(text);// 调用
text.value = tip;
text.onfocus = function () {
if (text.value === tip) text.value = '';
};
text.onblur = function () {
if (text.value === '') text.value = tip;
};
</script>
</body>
</html>
Javascript 相关文章推荐
修改js Calendar日历控件 兼容IE9/谷歌/火狐
Jan 04 Javascript
jquery.post用法示例代码
Jan 03 Javascript
JQuery处理json与ajax返回JSON实例代码
Jan 03 Javascript
JQuery实现简单的图片滑动切换特效
Nov 22 Javascript
jQuery实现Tab选项卡切换效果简单演示
Nov 23 Javascript
jQuery选择器用法实例详解
Dec 17 Javascript
AngularJS基础 ng-model 指令详解及示例代码
Aug 02 Javascript
Node之简单的前后端交互(实例讲解)
Nov 14 Javascript
vue移动端微信授权登录插件封装的实例
Aug 28 Javascript
JQuery模拟实现网页中自定义鼠标右键菜单功能
Nov 14 jQuery
如何去除富文本中的html标签及vue、react、微信小程序中的过滤器
Nov 21 Javascript
使用Vue生成动态表单
Nov 26 Javascript
js创建数据共享接口——简化框架之间相互传值
Oct 23 #Javascript
javascript模版引擎-tmpl的bug修复与性能优化分析
Oct 23 #Javascript
js面向对象设计用{}好还是function(){}好(构造函数)
Oct 23 #Javascript
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
Oct 23 #Javascript
利用jQuery插件扩展识别浏览器内核与外壳的类型和版本的实现代码
Oct 22 #Javascript
js两行代码按指定格式输出日期时间
Oct 21 #Javascript
jQuery中live方法的重复绑定说明
Oct 21 #Javascript
You might like
数据库查询记录php 多行多列显示
2009/08/15 PHP
PHP中foreach循环中使用引用要注意的地方
2011/01/02 PHP
基于PHP Socket配置以及实例的详细介绍
2013/06/13 PHP
php禁止浏览器使用缓存页面的方法
2014/11/07 PHP
PHP中如何使用Redis接管文件存储Session详解
2018/11/28 PHP
innerText和textContent对比及使用介绍
2013/02/27 Javascript
Jquery自定义button按钮的几种方法
2014/06/11 Javascript
js生成的验证码的实现与技术分析
2014/09/17 Javascript
js兼容pc端浏览器并有多种弹出小提示的手机端浮层控件实例
2015/04/29 Javascript
动态JavaScript所造成一些你不知道的危害
2016/09/25 Javascript
bootstrap输入框组使用方法
2017/02/07 Javascript
激动人心的 Angular HttpClient的源码解析
2017/07/10 Javascript
如何在vue中使用ts的示例代码
2018/02/28 Javascript
vue element项目引入icon图标的方法
2018/06/06 Javascript
Vue路由守卫之路由独享守卫
2019/09/25 Javascript
Python中str.format()详解
2017/03/12 Python
Python 实现「食行生鲜」签到领积分功能
2018/09/26 Python
完美解决python3.7 pip升级 拒绝访问问题
2019/07/12 Python
Python 线性回归分析以及评价指标详解
2020/04/02 Python
python文件读取失败怎么处理
2020/06/23 Python
纯CSS3打造动感漂亮时尚的扇形菜单
2014/03/18 HTML / CSS
html5使用canvas实现弹幕功能示例
2017/09/11 HTML / CSS
Notino匈牙利:购买香水和化妆品
2019/04/12 全球购物
Madda Fella官网:美国冒险家服装品牌
2020/01/16 全球购物
UNIX命令速查表
2012/03/10 面试题
机电一体化自荐信
2013/12/10 职场文书
共产党员公开承诺书
2014/03/25 职场文书
商务日语专业的自荐信
2014/05/23 职场文书
大学生优秀班干部事迹材料
2014/05/26 职场文书
政府法律服务方案
2014/06/14 职场文书
实习护士自荐信
2014/06/21 职场文书
职业道德模范事迹材料
2014/08/24 职场文书
财务会计实训报告
2014/11/05 职场文书
红白喜事主持词
2015/07/06 职场文书
python中的plt.cm.Paired用法说明
2021/05/31 Python
python绘制简单直方图(质量分布图)的方法
2022/04/21 Python