Resizable Textarea с использованием чистого 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, текстовое поле из идентификатора «resizableTA» был создан и добавлен к документу .body дерева DOM.
2) window.onload прикрепляет обработчик событий, taOnInput [textarea на входе].
3) textarea на входе создает фиктивный интервал, заставляет его ширину шириной textarea и шрифтом для «Lucida Console», который AFAIK является шрифтом по умолчанию для текстовых полей, копирует значение текстового поля в innerHTML, при замене% 0A [новая строка, используемая для использования в текстовых средах] с
[line break] ...
4) offset offsetHeight - это высота пролета, который теперь можно использовать для увеличения высоты текстового поля.
Может ли кто-нибудь подтвердить, что Lucida Console является шрифтом по умолчанию для textarea? Это Консола? Новый Курьер? Я предположил, что любой шрифт с фиксированной шириной будет работать. Я не использую Mac, поэтому я не знаю, какие шрифты он разделяет с окнами, хотя я думаю, что Courier New - лучший выбор ...
Почему вы не можете просто использовать текстовое поле? –
Хорошо, я вижу ваше редактирование, но почему вы не можете использовать расширяющуюся текстовую область? –
Umm Не знаю: D – Adam