Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Не большой конкурс от меня. Приз - шестизначная аська :) (https://forum.antichat.xyz/showthread.php?t=129445)

mff 12.07.2009 15:50

Не большой конкурс от меня. Приз - шестизначная аська :)
 
Сразу попрошу прощения у модераторов, если я ошибся разделом - перенесите плиз, куда нужно.


Вобщем есть код:
Код:

<textarea></textarea>
<input type="text" />

Нужно написать на js как можно минимально и правильно с точки зрения программирования сценарий.

Задача сценария: выводить в текстовом поле оставшееся количество знаков, при вводе символов в текстарии. Допустим, их будет: 500. Как только, при вводе в текстарии количество больше 500 - символ просто не добавляется.

Приз - шестизначый icq uin :)

P.S. Копипаст подобных форм и последующее переделывание - не приветствуется! Спасибо!

Pashkela 15.07.2009 03:42

хм, интересная задачка оказалась, мой вариант:

Код:

<script>
function isNotMax(e){
        e = e || window.event;
        var target = e.target || e.srcElement;
        var code=e.keyCode?e.keyCode:(e.which?e.which:e.charCode)

        switch (code){
                case 13:
                case 8:
                case 9:
                case 46:
                case 37:
                case 38:
                case 39:
                case 40:
                        return true;
}
      var max = 10; // Максимальное кол-во знаков в textarea (также надо выставить в html-форме)
      var l =  document.myform.text.value.length;
      if (l > max) document.myform.text.value = "";
      var a = document.myform.ost.value;
      if (a>=0 && l<=max) document.myform.ost.value = max - l;
      return target.value.length < max;
}
</script>
<form name="myform">
<textarea rows="10" cols="25" name = "text" onkeyup="return isNotMax(event)" onChange="return isNotMax(event)" onFocus="return isNotMax(event)" onBlur="return isNotMax(event)" onSelect="return isNotMax(event)" onMouseOut="return isNotMax(event)" onMouseMove="return isNotMax(event)"  onkeypress="return isNotMax(event)"></textarea>
<input type = "text" name = "ost" size = "5" value= "10">
</form>

Отличия от предыдущего:

1. Грамотная блокировка кнопок - т.е. можно заново перенабрать сообщение
2. Кол-во оставшихся символов считается всегда, если удалить часть текста и начать "донабирать" остаток
3. Защита от вставки большого текста из буфера (копипаст)

Работает в FF, IE и OPERA, что и закономерно, т.к. максимально упрощенно и без извратов старался

Но наверняка можно еще лучше сделать:)

eLWAux 15.07.2009 15:29

задачка уже давно решена в болталке, непонятно почему тут тема висит

mff 29.07.2009 14:13

Pashkela получает шестерочку 17-37-37, так как его код работает без глюков! Большое спасибо!!!!

Pashkela 29.07.2009 14:37

Спасибо :cool:


Время: 21:06