jQuery-скрипт для авторастяжки текстового поля textarea

17 ноября 2008 г.

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

И я нашел красивое решение, в виде jQuery-скрипта под названием jGrow. Проверял его в разных браузерах, в целом все нормально, заметил только один недочет - в Опере появляется горизонтальная прокрутка.

Размер самого скрипта совсем небольшой, выглядит вот так:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var $j = jQuery.noConflict();
$j.fn.jGrow = function(options) {
  var opts = $j.extend({}, $j.fn.jGrow.defaults, options);
  return this.each(function() {
    $j(this).css({ overflow: "hidden" }).bind("keypress", function() {
      $this = $j(this);
      var o = $j.meta ? $j.extend({}, opts, $this.data()) : opts;
      if(o.rows == 0 && (this.scrollHeight > this.clientHeight)) {
        this.rows += 1;
      } else if((this.rows <= o.rows) && (this.scrollHeight > this.clientHeight)) {
        this.rows += 1;
      } else if(o.rows != 0 && this.rows > o.rows) {
        $this.css({ overflow: "auto" });
      }
      $this.html();
    });
  });
}
$j.fn.jGrow.defaults = { rows: 0 };
$j(document).ready(function() { $j("#comment").jGrow({ rows: 25 }); })

Здесь нам интересна в плане настроек лишь последняя строка, а, вернее, вот эта ее часть:

1
$j("#comment").jGrow({ rows: 25 });

#comment - это идентификатор поля textarea, к которому хотим прицепить скрипт.
rows: 25 - максимальное количество строк, до которых будет происходить авторастяжка. Если содержимое поля станет больше этого количества строк, то появляется прокрутка.

Если сделать вот так:

1
$j("#comment").jGrow();

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

Прошу заметить следующий момент. Cрипт не работает, если тегу <textarea> задана высота через CSS, поэтому взамен нужно воспользоваться параметром rows:

1
<textarea name="comment" id="comment" cols="70" rows="8"></textarea>

Протестировать работу скрипта авторастяжки можно прямо на моем блоге.

Надеюсь, кому-то пригодится.

Теги: , , автор: Dimox | рубрика jQuery

Комментарии (20): »

  1. Я не очень понял… а что нельзя обнулить заданное через CSS свойство height? Дома попробую…

  2. Надеюсь, кому-то пригодится.

    Пригодится пригодится и еще как :)
    Спасибо.

  3. Спасибо, поставил у себя, тоже искал. Находил для друпала какой-то скрипт с рястягиваемой мышкой границей но вытаскивать лень было, ждал покуда что для jquery попроще будет.

    На родительские элементы тоже высоту видимо ставить нельзя, у меня плавать начинал поверх

  4. Steward, что имеешь в виду под словом “обнулить”?

    Sonikelf, пожалуйста ;)

    2Артём Курапов:

    На родительские элементы тоже высоту видимо ставить нельзя, у меня плавать начинал поверх

    Да, действительно, родительский блок должен быть “резиновым”.

  5. Во FF3 если писать много текста в одну строку, то его не переносит… а просто обрезает :( и скролбар горизонтальный не появляется.

  6. А меня прёт реализация в Safari. надо много текста взял мышкой и растянул текстареа.

  7. Во FF3 если писать много текста в одну строку, то его не переносит… а просто обрезает :( и скролбар горизонтальный не появляется.

    Не наблюдаю ни того, ни другого.

    А меня прёт реализация в Safari. надо много текста взял мышкой и растянул текстареа.

    Согласен, очень удобная вещь. Разработчикам остальных браузеров нужно брать в пример данную фичу.

  8. 8
    Разработчик всякой хрени
    Разработчик всякой хрени

    Не совсем понятно нафига это нужно. Во первых как уже говорилось можно через CSS, если уж так хочется. Да, еще момент. Если это присутствует на данном блоге, то в шестом ишаке какие то пятнашки получаются. Я пока набирал все дважы слева на право скакнуло.

    Хотя чисто с точки зрения разработчика достаточно интересно.

  9. Во первых как уже говорилось можно через CSS

    Во-первых, где такое говорилось? Во-вторых, сначала разберитесь в сути вопроса, прежде чем это писать.

    Если это присутствует на данном блоге, то в шестом ишаке какие то пятнашки получаются. Я пока набирал все дважы слева на право скакнуло.

    К скрипту это отношения не имеет. Пользуйтесь современным браузером.

  10. Если скопипастить текст в textarea, то размер не меняется, пока кнопками курсора до конца текста не добежишь :-) FF3

    @
  11. Сергей, да, есть такое. Но применительно к комментариями это не существенно - комментатор же, как правило, постепенно пишет весь текст, а не копирует его откуда-то. Да и в других случаях использования textarea это в основном происходит так же.

  12. Дима, рад что ты активнее начал писать статьи об использовании jquery.
    Тоже последнее время заинтересовался, изучаю, и использую в своих проектах.
    Кстати впервые услышал об этом фреймворке относительно недавно, когда прочел твою статью о вкладках

    @
  13. Евгений, спасибо. Рад, что тебе нравится ;)

  14. Я новичок. Недавно устновил себе wp. Что значит авто растягивание текстового поля? Какое именно поле будет растягиваться?

    @
  15. Поле, в котором вы пишите текст комментария.

  16. Ясно, Спасибо

    @
  17. в ie 7 вобще не работает

  18. Здравствуйте, Дмитрий.
    Возможно мой вопрос будет не совсем по теме, но меня заинтересовал Ваш вариант растяжки “правила комментирования”.
    Если Вам не трудно, подскажите, как реализовать эту функцию ?

    @
  19. Спасибо большое, Дмитрий! Простите за беспокойство - не нашел в первый раз этот пост.
    Очень полезная и нужная функция… для тех, кто понимает!
    Удачи Вам в творчестве и новых интересных публикаций для нас!

    @

Присоединяйтесь к обсуждению!

Отправляя кoммeнтapий, Вы автоматически принимаете правила кoммeнтиpoвaния на этом блоге.

Правила кoммeнтиpoвaния на блоге dimox.name:

  1. Первый кoммeнтapий всегда проходит премодерацию.
  2. В поле "URL блога" можно указывать только ссылку на главную страницу вашего блога. Ссылки на прочие веб-ресурсы (в том числе блоги/сплоги, созданные не для людей) будут удалены.
  3. Запрещается использовать в качестве имени комментатора слоганы/названия сайтов, рекламные фразы, ключевые и т.п. слова. В случае несоблюдения этого условия имя изменяется по усмотрению владельца блога. Просьба указывать нормальное имя или ник.
  4. Весьма вероятно, что короткий и неинформативный кoммeнтapий вида "Спасибо!", "Интересная статья", будет удален. Исключение составляют знакомые автору блога комментаторы.

Подписаться, не комментируя

Предыдущие из рубрики