フレームワークなしで純粋な JavaScript を使用したサイズ変更可能なテキストエリア:
<html>
<head>
<script>
function taOnInput()
{
var dis = this;
setTimeout(
function(){
var span = document.createElement("div");
span.innerHTML = escape(dis.value).replace(/[%]0A/g, "<br/>")+"<br/>."; //Extra BR for padding... TextArea uses %0A, not \n
span.style.width = dis.offsetWidth+"px";
span.style.padding = "0px";
span.style.fontFamily = "Lucida Console";
document.body.appendChild(span); //Offset height doesnt work when not in DOM tree i guess =/? or is it a hack
dis.style.height = span.offsetHeight+"px";
document.body.removeChild(span);
}, 1
); //setTimeout=hack, since oKP is called BEFORE character append.
}
window.onload = function()
{
var resizableTA = document.getElementById("resizableTA");
resizableTA.onkeypress = taOnInput;
}
</script>
<title>ItzWarty - Untitled Document</title>
</head>
<body>
<textarea id="resizableTA">Trololololol</textarea>
</body>
</html>
非常にハックです。10 分以内にまとめてください。うまくいけば、少なくともアイデアが得られるでしょう。
Google Chrome 5.0.308.0 でのみテスト済み
コードの説明、コメントに失敗したので
1) window.onload の前に、id "resizableTA" の textarea を作成し、DOM ツリーの document.body に追加しました。
2) window.onload は、イベント ハンドラー taOnInput [入力時のテキスト領域] をアタッチします。
3)入力のテキストエリアはダミースパンを作成し、その幅をテキストエリアの幅に強制し、フォントスタイルを「ルシダコンソール」に強制します。これは、AFAIKがテキストエリアのデフォルトフォントであり、テキストエリアの値をスパンのinnerHTMLにコピーします。 %0A [テキストエリアが使用する改行] with
[改行]...
4) スパンの offsetHeight はスパンの高さであり、テキストエリアの高さを強制するために使用できるようになりました。
Lucida Console が textarea のデフォルトのフォントであることを確認できる人はいますか? コンソラか?クーリエ 新しい?固定幅フォントなら何でも使えると思っていました。私は Mac を使用していないので、どのフォントが Windows と共有されているかはわかりませんが、Courier New の方が適していると思います...