Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Ограничение количества символов


Автор: PARROT 21.4.2005, 16:42
Меня интересует скрипт для ограничения символов для отправки форм.
Скрипт есть, но он не правильно работает. Можно ввести большее количество символов, методом копирования-вставки.

Код

var count=300;
function Lyad()
{
 document.formText.t1.value=count
 document.formText.t2.value=count
}
function text1Change()
{
 a=document.formText.text1.value.length;
 if((a)>count)document.formText.text1.value=document.formText.text1.value.substring(0,count);
 a=document.formText.text1.value.length;
 document.formText.t2.value=count-a;
}


А это то что пишется у формы:

Код

<td colspan=2 align=center><TextArea name="text1" rows=5 cols=30  onkeyup="text1Change()"></TextArea><br>
 Осталось на ввод:
 <input type="text" name="t2"  size="4" maxlength="4" disabled="false">
</td>


Вопрос такой: Можно ли исправить этот скрипт? Или smile

Автор: Irokez 21.4.2005, 17:08
у формы надо на onSubmit поставить проверку на длину текста
Добавлено @ 17:09
и в любом случае на сервере тоже надо проверить длину полученного сообщения

Автор: PARROT 21.4.2005, 17:16
smile

Автор: batigoal 21.4.2005, 17:17
Я бы сделал так:
Код

<html>
<head>
<script>
var count=20;
var last="";
function text1Change()
{
 if(document.getElementById('text1').value.length>count)
 {
   document.getElementById('text1').value = last;
   alert("Too long!");
 }
 else
 {
   last=document.getElementById('text1').value;
   document.getElementById('text2').value = count - document.getElementById('text1').value.length;
 }
}
</script>
</head>
<body>
<TextArea id='text1' name="text1" rows=5 cols=30  onKeyUp="return text1Change();"></TextArea><br>
 Left:
 <input id="text2" type="text" name="t2" value="20" size="4" maxlength="4" disabled="false">
</body>
</html>

Автор: Sardar 21.4.2005, 19:02
Если вспомним про событие onChange, то задача тут же сводится к рутине:
Код
<html>
<head>
<script type="text/javascript">
maxlen=300;
function checkLength(ob) {
  if(ob.value.length>maxlen) ob.value=ob.value.substring(0, maxlen);
  document.getElementById("text2").value=maxlen-ob.value.length;
}
</script>
</head>
<body>
<textarea id="text1" name="t1" rows="5" cols="30"  onkeyup="checkLength(this);" onchange="checkLength(this);"></textarea><br>
 <input id="text2" type="text" name="t2" value="300" size="4" maxlength="4" disabled="false" />
</body>
</html>

Автор: Aliance 21.4.2005, 20:11
Полезно: http://forum.vingrad.ru/index.php?showtopic=36336

Автор: batigoal 22.4.2005, 11:42
Цитата(Sardar @ 21.4.2005, 19:02)
Если вспомним про событие onChange

У меня почему-то с ним не работало smile

Автор: Aliance 22.4.2005, 11:55
Lamer George
А с ним проще. Это событие возникает при изменении default value эл-та.
Добавлено @ 11:56
Что именно не получалось, кидай код.

Автор: batigoal 22.4.2005, 12:32
Код тот же самый, только вместо onKeyUp - onChange. Но валидация происходит только тогда, когда я убираю фокус с поля или закрываю браузер.
Добавлено @ 12:35
Кстати, и в коде Sardar'а если убрать onkeyup, будет то же самое.

Автор: Sardar 22.4.2005, 13:00
Всё правильно, событие onchage ловим для конечной проверки, что бы вставить из буффера обмена нельзя было. А onkeyup для вывода инфы сколько символов осталось, если это не нужно, то событие убираем.

Автор: Aliance 22.4.2005, 14:14
Цитата(Lamer @ 22.4.2005, 13:32)
валидация происходит только тогда, когда я убираю фокус с поля

Повторюсь, так и длжно быть. Это не ошибка.

Автор: batigoal 22.4.2005, 14:41
Я понимаю. Просто у <input type="text"> другое поведение, вот я и ожидал аналогичного от textarea.

Автор: Sardar 22.4.2005, 17:35
Цитата(Lamer @ 22.4.2005, 13:41)
Я понимаю. Просто у <input type="text"> другое поведение, вот я и ожидал аналогичного от textarea.

Теперь я не понимаю smile Textarea и input:text ничем не отличаются. Приведи свой код.

Автор: batigoal 22.4.2005, 17:55
Пардон, напутал. Отличий действительно нет. А вот у select'a событие onChange происходит не тогда, когда он теряет фокус, а когда выбираешь другую опцию.

Автор: Aliance 22.4.2005, 19:37
Lamer George
Естественно. И там тоже не когда теряет фокус (а то бы это было бы onblur). А тогда - когда изменяешь default value smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)