jQuery автоматически изменяет размер предварительно заполненной текстовой области при загрузке - PullRequest
2 голосов
/ 25 ноября 2011

У меня есть текстовая область, которая создается после успешного вызова AJAX.Он может содержать довольно много текста, и я хотел бы, чтобы его высота была установлена ​​автоматически, чтобы весь текст был виден без прокрутки.

Я использую плагин autoResize (http://james.padolsey.com/javascript/jquery-plugin-autoresize/),, но он изменяет размеры входных данных только при вводе пользователем.

Итак, как мне изменить размер текстовой области, чтобы она соответствовала содержащемуся в ней тексту?

Вот код соответствующей функции (тип var может быть 'input' или 'textarea')

function edit_create_input(name, value, type, autocomplete, autoresize)
    {
    var input=$('<' + type + ' class="edit-"' + name + '  name="'+name+'">').val(value); 
    if (autocomplete)
        {
        input.autocomplete("ajax.autosuggest.php",{'multiple':true});
        }
    if (autoresize)
        {
        input.autoResize();
        }
    return input;

1 Ответ

3 голосов
/ 25 ноября 2011

В источнике плагина есть 3 события, при которых запускается функция updateSize():

// Bind namespaced handlers to appropriate events:
textarea
    .unbind('.dynSiz')
    .bind('keyup.dynSiz', updateSize)
    .bind('keydown.dynSiz', updateSize)
    .bind('change.dynSiz', updateSize);

Вы должны запустить одно из них после ajaxзагружает содержимое:

$("#my_textarea").trigger('change.dynSiz');

Редактировать: в соответствии с вашим кодом

// ...
if (autoresize)
{
    input.autoResize();
    input.trigger('change.dynSiz');
}
// ...

Примечание: с использованием .trigger() с событием пространства именудобнее, поскольку использование .change() (что также хорошо) будет запускать каждое событие изменения , связанное с объектом, а не только с тем, который вам нужен.

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

...