Textarea⾃动换⾏实现
前端页⾯使⽤ Textarea 来输⼊内容时,可能会有这样的需求,要求⽤户在指定的位置处⾃动换⾏,指定位置处⼀般就是指定⽤户输⼊⼀定
长度的字符。如下图所⽰:
⽽我们知道 Textarea 在默认情况下不会添加⾃动换⾏标记,也就是说 Textarea 如果不做处理,⽤户输⼊的始终是⼀⾏数据,保存到数据
库中也是⼀⾏数据。这样在其他地⽅展⽰时就会有数据丢失的情况,本篇⽂章我们就来实现 Textarea 所见即所得的⼀个效果。
实现思路:
textarea 添加 cols 和 wrap 属性,其中 wrap 设置成 hard,表⽰上传到服务器的内容会⾃动添加换⾏符,
外层使⽤ div 联动,优化textarea 的显⽰效果
实现代码:
<html>
<head>
<meta http-equiv="Content-Type"content="text/html; charset=utf-8">
</head>
<body>
<div id="divTest"
>
<textarea
cols = "72"
rows="24"
wrap="hard"
id="textarea">
</textarea>
</div>
<script type="text/javascript">
// 设置div⾼度
var textareaWidth = ElementById("textarea").offsetHeight;
var address = ElementById("textarea");
autoTextarea(address);
/**
* 参考⽹上资料
* ⽂本框根据输⼊内容⾃适应⾼度
* @param                {HTMLElement}          输⼊框元素
* @param                {Number}                设置光标与输⼊框保持的距离(默认0)
* @param                {Number}                设置最⼤⾼度(可选)
*/
function autoTextarea(elem, extra, maxHeight) {
extra = extra || 0;
// 浏览器判断
var isFirefox = !!BoxObjectFor || 'mozInnerScreenX'in window, isOpera = !!window.opera && !!String().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 = BoundingClientRect();
return rect.bottom - p - parseFloat(getStyle('paddingTop')) - parseFloat(getStyle('paddingBottom')) + 'px';    };
return val;
} : function(name) {
return getComputedStyle(elem, null)[name];
},
minHeight = parseFloat(getStyle('height'));
size = 'none';
textarea中cols表示
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();
};
</script>
</body>
</html>
最后实现效果:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。