IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Веб-программирование (http://www.imho.ws/forumdisplay.php?f=29)
-   -   Как ограничить максимальное кол-во знаков вводимых в textarea? (http://www.imho.ws/showthread.php?t=65154)

Drualex 28.07.2004 10:38

Как ограничить максимальное кол-во знаков вводимых в textarea?
 
Джентельмены, может кто-нить знает как ограничить ввод знаков в textarea. А то мне нельзя б базу заносить больше 255 знаков. А проверять на серваке - это будет слишком напрягать, если сам не знаешь сколько знаков уже ввел :(
С уважением.

is_absent 28.07.2004 11:14

на onsubmit формы сделай обработчик. в нем и проверяй.
что-то такое будет: return (!textarea_id.value.length > 10)

Код:

<script language="javascript">
function checkTextAreaLength(form) {
  if (form.textarea_id.value.length > 10) {
    alert("Слишком много ввели!");
    return false;
  }
  return true;
}
</script>
<form onsubmit="checkTextAreaLength(this)">
...
<textarea id=textarea_id></textarea>
...
</form>

упс
onsubmit = "return(checkTextAreaLength(this))"

CEO 28.07.2004 12:23

Или можно так:
<html>
<textarea onkeydown="javascript:count();" id="test" rows=8 cols=25></textarea>
<script>
function count()
{
var str1="";
str1=document.all.test.value;
if (str1.length == 255) alert("Превышенно допустимое число символов")
}
</script>
</html>

is_absent 28.07.2004 12:39

CEO
можно, но больше 255 символов все равно набрать можно будет и отправить... прямо из формы....

aceofext 28.07.2004 20:10

Вот как надо:

Код:

<textarea onkeydown="return (this.value.length < 255);"></textarea>

is_absent 28.07.2004 20:59

elishnevsky
красиво :) но иногда недостаточно.
ctrl+v -ctrl+с (из меню) пройдет

aceofext 28.07.2004 21:22

Что-то я лохонулся :) Ответил не проверив. onkeydown фигово работает. Если уже набрал 255 символов, то больше ничего сделать нельзя, даже стереть :) Заменить на onkeypress.
А с copy+paste проблемка. Чтоб всё работало идеально, надо не простой скриптик писать.

is_absent 28.07.2004 21:52

elishnevsky
на мой взгляд проверка должна быть двойной... на странице (для 99% пользователей), одним из предложеных вариантов и на сайте (понадобится в 1% случаев, даже меньше, для всяких крутых хакеров :) )
иначе любой яваскрипт можно обойти..

CEO 28.07.2004 22:20

Вот готовая форма со скриптом -- отображает сколько еще символов можно набрать, выдает сообщение если символов слишком много, режит до заданного размера если сообщение получается больше 255 символов.
Код:

<html>
<body bgcolor="#cccccc" text="#666666"
link="#666666" vlink="#666666" alink="#666666">
<script language="JavaScript">
function ChooseLen()
{
M = window.document.send.text.value.length;
if(M>255){
window.alert("Вы набрали слишком длинное сообщение");   
window.document.send.text.value= window.document.send.text.value.substring(0,255);
M = window.document.send.text.value.length;
    }
    window.document.send.count.value = 255-M;
}
</script>
<form enctype="multipart/form-data" action="send.php" method="POST"
name="send">
<table border="0" align="center">
<tbody><td>                           
<div align="center">
<font face="Arial, Helvetica, sans-serif">
<br><b>
<font size="-1">Текст сообщения</font></b></font><br>             
<textarea rows="8" cols="30" wrap="SOFT" NAME="text"
onfocus="ChooseLen()" onchange="ChooseLen()" onkeyup="ChooseLen()"
onkeydown="ChooseLen()" onkeypress="ChooseLen()"></textarea>
</div> </td><tr><th>                           
<div align="center"> <font face="Arial, Helvetica, sans-serif">
<font size="-1">Вы можете набрать еще
<input size="4" value="255" name="count" type="text"
onfocus="window.document.send.text.focus();"> символов
</font></font> </div>
</th></tr><tr><th> <br>
<input type="submit" name="Start" value="Отправить сообщение"></form>
<br> </th> </tr>
</tbody></table>
</body>
</html>


aceofext 29.07.2004 06:19

Уф. Есть решение. Правда наверное только для IE. Поддерживает Copy/Paste.

Создаётся след. HTC (HTML Component) файл:
maxlength.htc
Код:

<PUBLIC:COMPONENT id="bhvMaxlength" urn="maf:Maxlength">
        <PUBLIC:PROPERTY name="maxLength" />
        <PUBLIC:ATTACH event="onkeypress" handler="doKeypress" />
        <PUBLIC:ATTACH event="onbeforepaste" handler="doBeforePaste" />
        <PUBLIC:ATTACH event="onpaste" handler="doPaste" />

        <SCRIPT language="JScript">
        // Keep user from entering more than maxLength characters
        function doKeypress(){
            if(maxLength && value.length > maxLength-1){
                  event.returnValue = false;
                  maxLength = parseInt(maxLength);
            }
        }
        // Cancel default behavior
        function doBeforePaste(){
            if(maxLength)
                  event.returnValue = false;
        }
        // Cancel default behavior and create a new paste routine
        function doPaste(){
            if(maxLength){
                  event.returnValue = false;
                  maxLength = parseInt(maxLength);
                  var oTR = element.document.selection.createRange();
                  var iInsertLength = maxLength - value.length + oTR.text.length;
                  var sData = window.clipboardData.getData("Text").substr(0,iInsertLength);
                  oTR.text = sData;
            }
        }
        </SCRIPT>
</PUBLIC:COMPONENT>

Затем в HTML файле пишется следущая весчь:
Код:

<textarea maxlength="255" style="behavior: url(maxlength.htc)"></textarea>
Понятно, что можно сделать тоже самое и без HTC файла. Но с ним красиво :)

is_absent 29.07.2004 06:23

Цитата:

window.document.send.text.value=window.document.se nd.text.value.substring(0,255);
без пробела надо бы... все остальное работеат :)

CEO 29.07.2004 08:19

elishnevsky:Класс! Тот код, что я предложил тоже поддерживает Copy/Paste, но твой вариант куда как интереснее :). В IE5 все прекрасно работает, но в Mozilla 1.6 такой скрипт не пашет к сожалению.

aceofext 29.07.2004 08:25

Да, behaviors - хорошая вещь.

drGluck 13.10.2009 14:58

Цитата:

Сообщение от Drualex (Сообщение 585561)
Джентельмены, может кто-нить знает как ограничить ввод знаков в textarea. А то мне нельзя б базу заносить больше 255 знаков. А проверять на серваке - это будет слишком напрягать, если сам не знаешь сколько знаков уже ввел :(
С уважением.

да вы чо блин ребята!! Смешно просто!!))))
вот как НАДО!
кушайте на здоровье ;-)

Код:

<textarea onkeypress="if(this.value.length>255){this.value=this.value.substr(0,255)};"></textarea>
и ничего не стопорится! а от предыдущих кодов я не в восторге! то тупо встанет и ничего не двигается при достижении предела, то просто банально объёмный код.. а этот прост как мои тапочки )))

добавлено через 2 минуты
блин ФИГАСЕ! :eek: только щяс увидел дату!!)))))))) мягко говоря ужосНах!)) это ж пять лет то прошло!)))))))) а я тут за минуту слепил)) но всёравно кому пригодится может! а то пишут тонны скриптов.. а толку?!

aceofext 13.10.2009 19:12

Бугага :))))) Поднял такой древний топик :)))
Да, многое с тех пор изменилось. А behaviors - полное говно! :)


Часовой пояс GMT +4, время: 02:32.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.