Автоматическое изменение размера элемента textarea
В данном уроке представлено решение задачи автоматического изменения размера элемента textarea
в соответствии с содержанием, которое может быть загружено динамически с помощью AJAX. Размер содержания не известен, а элемент textarea
не изменяет размера естественным образом, как другие элементы HTML. Поэтому нужно использовать JavaScript для изменения высоты элемента каждый раз при обновлении содержания.
Казалось бы - простая задача. Но если поискать плагины или скрипты, которые посвящены данной теме, то обнаружится неприятный сюрприз - они все оказываются чрезмерно сложными для решения такого простого вопроса. Большинство из них использует сложные математические вычисления, хотя есть более простой способ.
Используем скрытый клонирующий элемент.
Элемент <div>
естественным образом растягивается , чтобы все содержание (предполагаем, что отключено обтекание текста или используется абсолютное позиционирование). То есть, чтобы получить высоту элемента textarea
, нужно сделать следующее:
- Взять содержимое элемента
textarea.
- Создать невидимый клонирующий элемент
div.
- Задать для клона такие же типографические свойства и ширину, как и у элемента
textarea
. - Поместить содержание в клон.
- Получить высоту клона.
- Использовать полученное значение для изменения высоты элемента
textarea
.
Код
Ключевым моментом данного решения является код CSS. Как уже упоминалось, невидимый клон должен иметь такие же типографические свойства, как и элемент textarea
. В список включается не только font-size
и font-family
, но и свойства white-space
и word-wrap
, так как клон должен имитировать все, что происходит внутри элемента textarea.
Для элемента textarea
код CSS будет следующим:
textarea { width: 500px; min-height: 50px; font-family: Arial, sans-serif; font-size: 13px; color: #444; padding: 5px; } .noscroll { overflow: hidden; }
Обратите внимание на отдельный класс со свойством overflow: hidden
, который используется для предотвращения появления полоски прокрутки. Обычно, отключение полоски прокрутки у элемента textarea
является плохой идеей, но мы изменяем его с помощью JavaScript. Данный класс будет добавляться кодом JavaScript, поэтому при отключенном JavaScipt элемент textarea
будет функционировать нормально (с прокруткой).
Следующий код CSS используется для скрытого клонирующего элемента:
.hiddendiv { display: none; white-space: pre-wrap; width: 500px; min-height: 50px; font-family: Arial, sans-serif; font-size: 13px; padding: 5px; word-wrap: break-word; }
Мы используем свойство display: none
, чтобы сделать элемент невидимым для пользователя. Скорее всего, такое решение подходит и для программ читалок с экрана.
Также используется свойство white-space
со значением “pre-wrap”, для корректного переноса строк. Ширина элемента клона равна ширине элемента textarea
. Кроме того одинаковыми задаются несколько других свойств, в том числе и min-height.
А теперь код JavaScript (используется jQuery):
$(function() { var txt = $('#comments'), hiddenDiv = $(document.createElement('div')), content = null; txt.addClass('noscroll'); hiddenDiv.addClass('hiddendiv'); $('body').append(hiddenDiv); txt.bind('keyup', function() { content = txt.val(); content = content.replace(/\n/g, '<br>'); hiddenDiv.html(content); txt.css('height', hiddenDiv.height()); }); });
Данный код предполагает, что у нас используется только один элемент textarea
на странице. Если имеется несколько элементов textarea
на странице, то нужно изменить селектор в первой строке для выбора нужных.
Высота динамически изменяется при обработке события jQuery keyup
. Код легко изменить для работы с AJAX, если содержание меняется таким образом.
Использование события keyup
также является хорошим примером, потому что данный элемент часто используется при ввода данных пользователем.
А что происходит в IE6-8?
Решение в чистом виде не работает в IE6-8. Причина - плохая обработка внутреннего HTML содержания. Решение, которое действует почти во всех случаях заключается в следующей строке JavaScript кода:
// Решение проблемы в обработкой внутреннего HTML содержания в IE content = content.replace(/\n/g, '<br>');
Однако длинные строки без переносов продолжают вносить ошибки в процесс. Поэтому надо использовать свойство word-wrap: break-word
для клонирующего элемента.
Источник: http://feedproxy.google.com/~r/ruseller/CdHX/~3/ZHSp_gu1Zvc/lessons.php
Дайджест новых статей по интернет-маркетингу на ваш email
Новые статьи и публикации
- 2024-11-26 » Капитан грузового судна, или Как начать использовать Docker в своих проектах
- 2024-11-26 » Обеспечение безопасности ваших веб-приложений с помощью PHP OOP и PDO
- 2024-11-22 » Ошибки в Яндекс Вебмастере: как найти и исправить
- 2024-11-22 » Ошибки в Яндекс Вебмастере: как найти и исправить
- 2024-11-15 » Перенос сайта на WordPress с одного домена на другой
- 2024-11-08 » OSPanel 6: быстрый старт
- 2024-11-08 » Как установить PhpMyAdmin в Open Server Panel
- 2024-09-30 » Как быстро запустить Laravel на Windows
- 2024-09-25 » Next.js
- 2024-09-05 » OpenAI рассказал, как запретить ChatGPT использовать содержимое сайта для обучения
- 2024-08-28 » Чек-лист: как увеличить конверсию интернет-магазина на примере спортпита
- 2024-08-01 » WebSocket
- 2024-07-26 » Интеграция с Яндекс Еда
- 2024-07-26 » Интеграция с Эквайринг
- 2024-07-26 » Интеграция с СДЕК
- 2024-07-26 » Интеграция с Битрикс-24
- 2024-07-26 » Интеграция с Travelline
- 2024-07-26 » Интеграция с Iiko
- 2024-07-26 » Интеграция с Delivery Club
- 2024-07-26 » Интеграция с CRM
- 2024-07-26 » Интеграция с 1C-Бухгалтерия
- 2024-07-24 » Что такое сторителлинг: техники и примеры
- 2024-07-17 » Ошибка 404: что это такое и как ее использовать для бизнеса
- 2024-07-03 » Размещайте прайс-листы на FarPost.ru и продавайте товары быстро и выгодно
- 2024-07-01 » Профилирование кода в PHP
- 2024-06-28 » Изучаем ABC/XYZ-анализ: что это такое и какие решения с помощью него принимают
- 2024-06-17 » Зачем вам знать потребности клиента
- 2024-06-11 » Что нового в работе Яндекс Метрики: полный обзор обновления
- 2024-06-11 » Поведенческие факторы ранжирования в Яндексе
- 2024-06-11 » Скорость загрузки сайта: почему это важно и как влияет на ранжирование
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей Индийская пословица |
Мы создаем сайты, которые работают! Профессионально обслуживаем и продвигаем их , а также по всей России и ближнему зарубежью с 2006 года!
Как мы работаем
Заявка
Позвоните или оставьте заявку на сайте.
Консультация
Обсуждаем что именно Вам нужно и помогаем определить как это лучше сделать!
Договор
Заключаем договор на оказание услуг, в котором прописаны условия и обязанности обеих сторон.
Выполнение работ
Непосредственно оказание требующихся услуг и работ по вашему заданию.
Поддержка
Сдача выполненых работ, последующие корректировки и поддержка при необходимости.