Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> изменение размера textarea 
:(
    Опции темы
Vovan222
Дата 9.9.2010, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 9.9.2010

Репутация: нет
Всего: нет



Есть textarea:
Код

<html>
    <head>
    </head>
    <body>
        <textarea style="width:300px; height:80px;"></textarea>
    </body>
</html>

Можно ли сделать так чтобы когда вводишь текст, то когда он не помещается в textarea по вертикали, то вертикальная полоса прокрутки не появлялась, а вместо этого textarea динамически меняла бы увеличивала свой размер по высоте?
PM MAIL   Вверх
bars80080
Дата 9.9.2010, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



можно, ставим обработчик на текстарею, допустим по onkeyup. в обработчике рассчитываем высоту и ширину поля, замеряем длину введённого текста, и сравниваем через установленный коэффициент. конечно, коэффициент придётся подгонять, и для достоверности выставить моноширинный шрифт
PM MAIL WWW   Вверх
Vovan222
Дата 9.9.2010, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 9.9.2010

Репутация: нет
Всего: нет



bars80080,  не могли бы вы привести примерчик на JS? 
PM MAIL   Вверх
CruorVult
Дата 9.9.2010, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

Репутация: 3
Всего: 28



Код

<textarea onkeypress="resize(this, event)" cols="20" rows="2"></textarea>


Изменение и высоты и длины:
Код

function resize(el, e) {        
    var text = el.value;
    var rows = text.split(/\n/g);    
    if(e.keyCode == 13) {
        if( rows.length>=el.rows) el.rows++;  
    } else if(el.cols<=rows[rows.length-1].length){
        el.cols++;
    }
}


Это сообщение отредактировал(а) CruorVult - 10.9.2010, 10:07
PM MAIL Skype   Вверх
bars80080
Дата 9.9.2010, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



CruorVult, а он отследит текст, если пользователь не будет нажимать на кнопку enter?


Цитата(Vovan222 @  9.9.2010,  20:35 Найти цитируемый пост)
не могли бы вы привести примерчик на JS?  

на чистом js писать не буду, долго. с jquery должно быть как-то так:

Код

<textarea onkeypress="reheigher(this)"></textarea>


Код

function reheigher(th) {    
    var kw = 10; // некий коэффициент равный ширине буквы
    var kh = 16; // коэффициент равный высоте буквы
    var h = $(th).height();
    var w = $(th).width();
    var l = $(th).innerHTML.length;
    var r = l*kw*kh/w;
    $(th).height(r);
}


Это сообщение отредактировал(а) bars80080 - 9.9.2010, 22:25
PM MAIL WWW   Вверх
CruorVult
Дата 9.9.2010, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

Репутация: 3
Всего: 28



Цитата(bars80080 @  9.9.2010,  22:25 Найти цитируемый пост)
CruorVult, а он отследит текст, если пользователь не будет нажимать на кнопку enter?

bars80080, нет. В опере текстареа будет расширяться по-горизонтали если писать сплошной текст,  а по вертикали только по ентеру. Для других браузеров не покатит, согласен, но можно подлатать код если надо. Хотя забью, раз твой код работает smile 

Сомневаюсь что он будет корректно работать. Как я понял размер завист от длины строки, тоесть если я введу:
Цитата

ааааа

и
Цитата

а
а
а
а
а

то высота изменится одинаково, хотя должна быть разной.

Это сообщение отредактировал(а) CruorVult - 10.9.2010, 09:34
PM MAIL Skype   Вверх
Vovan222
Дата 10.9.2010, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 9.9.2010

Репутация: нет
Всего: нет



есть вот такой вот примерчик, вроде высота textarea во всех браузерах изменяется правильно, однако в IE и Opera если в последней строке остается примерно 6-10 символов для ввода, то он все равно расширяется на одну строчку:
Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
  <title>изменение размера textarea</title>
<style type="text/css">
body {
background-color:#004B52;
}
textarea{
  background-color: #FF0000;
  color:yellow;
}
</style>
<script language="JavaScript" type="text/javascript">
function flexibleTextarea(b) {
    var a = document.getElementById(b) || b;
    if (a) {
        a.style.overflow = "hidden";
        var e = a.rows = a.rows > 0 ? a.rows : 2;
        b = a.cols = a.cols > 0 ? a.cols : 20;
        var g = RegExp("([^\r\n]{" + b + "})([^\r\n])"),
            f = RegExp("[^\n]{" + b + "}\n?$|[^\n]{0," + b + "}\n");
        a.onkeyup = a.onkeydown = function () {
            a.value = a.value.replace(g, "$1\r\n$2");
            for (var c = 0, d = a.value; d.search(f) >= 0;) {
                c++;
                d = d.replace(f, "")
            }
            c ++;
            if (c < e) c = e;
            a.rows = c
        }
    }
};
window.onload = function(){
flexibleTextarea('textarea');
flexibleTextarea('textarea1');
}
</script>
</head>
<body>
<textarea id='textarea'   rows="3"    cols="50" ></textarea>
<br />
<textarea id='textarea1' ></textarea>
</body>
</html>

 
в чем может быть проблема?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0938 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.