автоматическое изменение размера текстовой области в jquery

Как я могу сделать <textarea> автоматическое изменение размера с его содержимым (как в Facebook) с помощью jQuery.


person Piyush    schedule 01.06.2010    source источник
comment
Автоматическое изменение размера в соответствии с чем? Содержащий элемент? Окно? Длина текста?   -  person Matti Virkkunen    schedule 01.06.2010
comment
Я полагаю, вы имеете в виду текстовую область Safari/Chrome по умолчанию... или растущую текстовую область, как на Facebook?   -  person scunliffe    schedule 01.06.2010
comment
точно так же, как facebook, я хочу изменить размер своего текстового поля, когда я ввожу больше текста в текстовое поле   -  person Piyush    schedule 01.06.2010
comment
У меня нет кода (удобного), который это сделает, но у IIRC, facebook есть скрытый div, стиль которого идентичен текстовой области, которая обновляется при вводе текста. Затем измеряется div, чтобы увидеть, насколько он велик, а затем размер текстовой области изменяется, чтобы соответствовать.   -  person scunliffe    schedule 01.06.2010


Ответы (4)


Используйте интерфейс jQuery.

Посмотрите эту демонстрацию: http://jqueryui.com/demos/resizable/#textarea

person konradowy    schedule 01.06.2010

Используйте плагин jquery autoResize Джеймса Падолси из http://james.padolsey.com/javascript/jquery-plugin-autoresize/

Основное использование

    $('textarea#comment').autoResize({
        // On resize:
        onResize : function() {
        $(this).css({opacity:0.8});
        },
        // After resize:
        animateCallback : function() {
        $(this).css({opacity:1});
        },
        // Quite slow animation:
        animateDuration : 300,
        // More extra space:
        extraSpace : 40
    });
person Shadrack B. Orina    schedule 24.09.2011

Супер легкий вес:

Кто-нибудь считал контент редактируемым? Не возитесь с прокруткой, и единственный JS, который мне нравится, это если вы планируете сохранять данные при размытии... и, по-видимому, он совместим со всеми популярными браузерами: http://caniuse.com/#feat=contenteditable

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

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

http://jsfiddle.net/gbutiri/v31o8xfo/

<style>
.autoheight {
    min-height: 16px;
    font-size: 16px;
    margin: 0;
    padding: 10px;
    font-family: Arial;
    line-height: 16px;
    box-sizing: border-box;
    -moz-box-sizing: border-box;
    -webkit-box-sizing: border-box;
    overflow: hidden;
    resize: none;
    border: 1px solid #ccc;
    outline: none;
    width: 200px;
}
</style>
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<script>
$(document).on('blur','.autoheight',function(e) {
    var $this = $(this);
    // The text is here. Do whatever you want with it.
    console.log($this.html());
});

</script>
<div class="autoheight contenteditable" contenteditable="true">Mickey <b>Mouse</b></div>
person Webmaster G    schedule 16.10.2014

person    schedule
comment
Отличное решение на чистом javascript! - person devasia2112; 18.03.2014