直接上代碼:
方案一:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <TITLE>楓芸志 » 文字框textarea高度自適應增長/伸縮</tITLE> <style> textarea { height:100px; width: 300px; } </style> </hEAD> <BODY> <pre class="code" id="txtContent" rows="1" onpropertychange="ResizeTextarea()" oninput="ResizeTextarea()" onkeyup="ResizeTextarea()">晴楓製作 http://jb51.net</textarea> </bODY> </hTML>
[Ctrl+A 全選 注:如需引入外部Js需重新整理才能執行]
方案一在各瀏覽器中,文字框隨內容自適應增長都沒有問題;但在刪除內容時收縮方面表現有所差異,IE、Opera表現正常,Firefox、Chrome、Safari不會收縮。原因是文字框內容高度小於文字框高度時scrollHeight值等於文字框高度,而不是文字框內容高度。
方案二:
複製代碼 代碼如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<TITLE>楓芸志 » 文字框textarea高度自適應增長/伸縮</TITLE>
</HEAD>
<BODY>
<textarea id="txtContent" rows="5" cols="50" onkeyup="ResizeTextarea()" style="overflow-y:hidden;">Textarea高度隨內容自適應地增長,無捲軸
晴楓製作
http://jb51.net</textarea>
<script type="text/javascript">
// 最小高度
var minRows = 5;
// 最大高度,超過則出現捲軸
var maxRows = 12;
function ResizeTextarea(){
var t = document.getElementById('txtContent');
if (t.scrollTop == 0) t.scrollTop=1;
while (t.scrollTop == 0){
if (t.rows > minRows)
t.rows--;
else
break;
t.scrollTop = 1;
if (t.rows < maxRows)
t.style.overflowY = "hidden";
if (t.scrollTop > 0){
t.rows++;
break;
}
}
while(t.scrollTop > 0){
if (t.rows < maxRows){
t.rows++;
if (t.scrollTop == 0) t.scrollTop=1;
}
else{
t.style.overflowY = "auto";
break;
}
}
}
</script>
</BODY>
</HTML>
方案二在各瀏覽器中表現相同,皆可使文字框隨內容自適應增長和收縮。但有個缺憾是在文字框高度增長的時候,文字框顯示會有一個跳動。
另以上兩個方案對於通過文字框右鍵菜單選擇剪下、粘貼、刪除等命令操作常值內容的情形都無效。可以說暫未找到完美的解決方案,留待以後再來研究。哪位同學如果有完美的方案的話敬請賜教!
其他方案:
- A different approach to elastic textareas 方案二即參考此文後實現
- Build an Elastic Textarea with Ext JS
- Smart TextArea: scrollHeight in IE, Firefox, Opera and Safari
原文連結:http://witmax.cn/javascript-textarea-auto-grow.html