Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: ограничение вводимого текста в textarea по высоте формы
 
 автор: тщтфьу   (16.08.2007 в 18:46)   письмо автору
 
 

подскажите, пожалуйста, как ограничить вводимый текст по заданной высоте textarea? т.е. в textarea не появляется скроллинг и верхняя строчка не поднимается, а просто невозможно дальше ввести текст.

   
 
 автор: Furst   (16.08.2007 в 19:28)   письмо автору
 
   для: тщтфьу   (16.08.2007 в 18:46)
 

Может это поможет


<html>
<head>
<script language="JavaScript">
function textCounter( field, countfield, maxlimit ) {
  if ( field.value.length > maxlimit )
  {
    field.value = field.value.substring( 0, maxlimit );
    alert( 'Textarea value can only be 255 characters in length.' );
    return false;
  }
  else
  {
    countfield.value = maxlimit - field.value.length;
  }
}

</script>
</head>
<body>
<form name="maxlength_test" action="who_cares" method="">
<TEXTAREA
    NAME="something"
    ROWS="10"
    COLS="50"
    onkeypress="textCounter(this,this.form.counter,255);">
</TEXTAREA>
<br>
<input
    type="text"
    name="counter"
    maxlength="3"
    size="3"
    value="255"
    onblur="textCounter(this.form.counter,this,255);"> characters remaining
</form>
</body>
</html>

   
 
 автор: тщтфьу   (17.08.2007 в 03:18)   письмо автору
 
   для: Furst   (16.08.2007 в 19:28)
 

Furst, спасибо, но это ограничение по количеству символов, а не по высоте textarea, т.е. по количеству строк в форме. в каждой строке может быть ведь разное количество символов, а это значит, что количество строк может быть тоже разным. нужно ограничение именно по высоте формы.

   
 
 автор: CNT   (17.08.2007 в 04:21)   письмо автору
 
   для: тщтфьу   (17.08.2007 в 03:18)
 

Для MSIE решение простое:
<textarea style="width: 60%; height: 40%; overflow: hidden"
onpaste="O = this; S = O.value; setTimeout ('O.value = S', 0)"
onkeydown="O = this; S = O.value; if (O.createTextRange ().boundingHeight > O.offsetHeight - 8) setTimeout ('O.value = S', 0)"></textarea>

PS. Выделенное жирно число 8 - это приблизительно взятая величина "высоты одной строки в TEXTAREA" . Это значение можно, конечно, вычислить абсолютно точно (через getClientRects ().length), но я здесь просто не стал заморачиваться, дабы не затенять решение поставленной задачи.

PS1. Запрещено вообще вставлять что-нибудь из буфера, ибо определить "высоту" того, что в буфере находится (т.е. до вставки в <TEXTAREA>), не представляется возможным. А что делать в случае, если текст (после вставки из буфера) превысит высоту <TEXTAREA>, вы не указали: обрезать, или же вовсе запрещать? Потому и решил радикально - вставлять из буфера вовсе НИЗЗЯ.

PS2. Реализовать это же для Mozilla - нельзя. Или, может быть, мне просто не хватает знаний по DOM Mozilla :-)

   
 
 автор: тщтфьу   (17.08.2007 в 14:59)   письмо автору
 
   для: CNT   (17.08.2007 в 04:21)
 

CNT, спасибо за ответ!!! из буфера вставлять тоже нужно, а то, что не влезло, должно обрезаться.

   
 
 автор: тщтфьу   (19.08.2007 в 04:26)   письмо автору
 
   для: CNT   (17.08.2007 в 04:21)
 

уважаемый CNT, я пробую сделать для onpaste="O = this; S = O.value; if (O.createTextRange ().boundingHeight > O.offsetHeight - 8) setTimeout ('O.value = S', 0)", но при вставке текста из буфера текст не обрезается. пожалуйста, подскажите как быть со вставкой из буфера.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования