Не большой конкурс от меня. Приз - шестизначная аська :)

Discussion in 'PHP' started by mff, 12 Jul 2009.

  1. mff

    mff Elder - Старейшина

    Joined:
    12 Mar 2008
    Messages:
    2,074
    Likes Received:
    701
    Reputations:
    227
    Сразу попрошу прощения у модераторов, если я ошибся разделом - перенесите плиз, куда нужно.


    Вобщем есть код:
    Code:
    <textarea></textarea>
    <input type="text" />
    Нужно написать на js как можно минимально и правильно с точки зрения программирования сценарий.

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

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

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

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    хм, интересная задачка оказалась, мой вариант:

    Code:
    <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, что и закономерно, т.к. максимально упрощенно и без извратов старался

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

    eLWAux Elder - Старейшина

    Joined:
    15 Jun 2008
    Messages:
    860
    Likes Received:
    616
    Reputations:
    211
    задачка уже давно решена в болталке, непонятно почему тут тема висит
     
    3 people like this.
  4. mff

    mff Elder - Старейшина

    Joined:
    12 Mar 2008
    Messages:
    2,074
    Likes Received:
    701
    Reputations:
    227
    Pashkela получает шестерочку 17-37-37, так как его код работает без глюков! Большое спасибо!!!!
     
  5. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Спасибо :cool:
     
    1 person likes this.