Tự động mở rộng vùng văn bản bằng jQuery


128

Làm cách nào để tạo một textarea tự động mở rộng bằng jQuery?

Tôi có một hộp văn bản để giải thích chương trình nghị sự của cuộc họp, vì vậy tôi muốn mở rộng hộp văn bản đó khi văn bản chương trình nghị sự của tôi tiếp tục phát triển khu vực hộp văn bản đó.


i thik textarea là tự động mở rộng.
Sullivan


Vui lòng xem xét thay đổi câu hỏi của bạn và xóa từ "jQuery"
vsync

Câu trả lời:


113

Tôi đã thử rất nhiều và cái này là tuyệt vời. Liên kết đã chết. Phiên bản mới hơn có sẵn ở đây . Xem bên dưới cho phiên bản cũ.
Bạn có thể thử bằng cách nhấn và giữ phím enter trong textarea. So sánh hiệu quả với các plugin mở rộng văn bản tự động khác ....

chỉnh sửa dựa trên nhận xét

$(function() {
   $('#txtMeetingAgenda').autogrow();
});

lưu ý: bạn nên bao gồm các tệp js cần thiết ...

Để ngăn chặn các thanh cuộn trong textarea từ nhấp nháy và tắt trong việc mở rộng / thu hẹp, bạn có thể thiết lập overflowđể hiddencũng như:

$('#textMeetingAgenda').css('overflow', 'hidden').autogrow()




Cập nhật:

Liên kết trên bị hỏng. Nhưng bạn vẫn có thể lấy các tập tin javascript ở đây .


nếu id hộp văn bản của tôi là txtMeetingAgenda thì làm cách nào tôi có thể triển khai thuộc tính Auto textArea trong jquery
Piyush

sự kiện nhấp vào đây có được xác định hay không
Piyush

Đây là tất cả về textarea nhưng những gì về textbox. Đây là plugin này cũng hoạt động cho textbox?
Piyush

1
plugin này không hoạt động tốt, hãy thử tự động hóa, cách này tốt hơn
julesbou

Nó hoạt động tốt chỉ có một cách khi textarea đang phát triển. Nhưng khi bạn bắt đầu xóa văn bản, nó sẽ không tự động giảm chiều cao.
ekashking

166

Nếu bạn không muốn một plugin, có một giải pháp rất đơn giản

$("textarea").keyup(function(e) {
    while($(this).outerHeight() < this.scrollHeight + parseFloat($(this).css("borderTopWidth")) + parseFloat($(this).css("borderBottomWidth"))) {
        $(this).height($(this).height()+1);
    };
});

Xem nó hoạt động trong một jsFiddle tôi đã sử dụng để trả lời một câu hỏi văn bản khác ở đây .

Để trả lời câu hỏi làm ngược lại hoặc làm cho nó nhỏ hơn khi văn bản bị xóa: jsFiddle

Và nếu bạn muốn có một plugin

@Jason đã thiết kế một cái ở đây


1
Tôi đã gỡ bỏ + parseFloat ($ (this) .css ( "borderTopWidth")) + parseFloat ($ (this) .css ( "borderBottomWidth")), ngược lại nó vô vòng với một textarea kiểu với bootstrap
blacelle

3
Phiên bản không có jQuery:if (this.clientHeight < this.scrollHeight) { this.style.height = this.scrollHeight + 'px'; }
Georgii Ivankin

3
@metakungfu Vâng thay vì chỉ bỏ qua, có lẽ bạn có thể giúp cải thiện câu trả lời. Tôi không có cách nào để kiểm tra atm crap táo và safari cho windows đã bị ngưng từ lâu. Vì vậy, tôi thực sự không thể làm gì để xác định lý do tại sao nó không hoạt động. Code-khôn ngoan, không có gì sai với giải pháp này. Bạn có chắc chắn đó là mã phá vỡ và không phá vỡ safari trong jsfiddle? safari là khá kén chọn và fiddle đã trải qua một bản cập nhật lớn. Mayeb bạn có thể mở dev con và cung cấp thêm một số chi tiết?
SpYk3HH

1
cũng cần textarea overflow-y được đặt thành ẩn để tránh cuộn flash
iulial

2
Nếu tôi muốn xóa các hàng đã thêm, kích thước mở rộng của hộp văn bản vẫn giữ nguyên, có thể nó cũng có thể tự động thay đổi kích thước trở lại?
Steven

33

Mọc / Thu nhỏ textarea. Bản demo này sử dụng jQuery để liên kết sự kiện, nhưng nó không phải là một cách bắt buộc.
( không hỗ trợ IE - IE không đáp ứng với thay đổi thuộc tính hàng )

TRANG DEMO


HTML

<textarea class='autoExpand' rows='3' data-min-rows='3' placeholder='Auto-Expanding Textarea'></textarea>

CSS

textarea{  
  display:block;
  box-sizing: padding-box;
  overflow:hidden;

  padding:10px;
  width:250px;
  font-size:14px;
  margin:50px auto;
  border-radius:8px;
  border:6px solid #556677;
}

javascript (cập nhật)

$(document)
    .one('focus.textarea', '.autoExpand', function(){
        var savedValue = this.value;
        this.value = '';
        this.baseScrollHeight = this.scrollHeight;
        this.value = savedValue;
    })
    .on('input.textarea', '.autoExpand', function(){
        var minRows = this.getAttribute('data-min-rows')|0,
            rows;
        this.rows = minRows;
        rows = Math.ceil((this.scrollHeight - this.baseScrollHeight) / 16);
        this.rows = minRows + rows;
    });

2
bởi vì mã phải chờ một chút để chữ bạn đã nhập được in bên trong textarea và do đó thay đổi kích thước của textarea
vsync

1
Tôi thấy, giải pháp bị hỏng khi văn bản được sao chép (CTRL + V) từ bất kỳ nguồn nào. Trong khi, nếu văn bản được gõ thủ công - điều này thật tuyệt vời và rất mượt mà.
Satya Kalluri

1
@vsync: bạn sẽ sửa đổi như thế nào cho nhiều vùng văn bản? Tức là bạn có textarea1 và textarea2 và bạn muốn cho phép cả hai phát triển?
jmoreno

1
Đây phải là câu trả lời hàng đầu! Tôi đã đăng một câu hỏi dựa trên câu hỏi đó nếu có ai quan tâm: stackoverflow.com/questions/29930300/iêu
gsamaras

1
@AllyM bồ - Tôi đã đi và cập nhật nó lên 16 vì nó dường như cho kết quả tốt hơn. và vâng, đó là chiều cao dòng dự kiến
vsync


20

Bạn có thể thử cái này

$('#content').on('change keyup keydown paste cut', 'textarea', function () {
        $(this).height(0).height(this.scrollHeight);
    }).find('textarea').change();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="content">
  <textarea>How about it</textarea><br />
  <textarea rows="5">111111
222222
333333
444444
555555
666666</textarea>
</div>


nếu bạn muốn lấy scrollHeight từ $ (this), bạn có thể sử dụng $ (this) .prop ('scrollHeight'); thay vào đó;)
Samuel Vicent

3
nó nhấp nháy mỗi lần ngắt dòng
joe

11

Nhờ SpYk3HH, tôi bắt đầu với giải pháp của anh ấy và biến nó thành giải pháp này, bổ sung chức năng thu nhỏ và thậm chí còn đơn giản và nhanh hơn, tôi đoán vậy.

$("textarea").keyup(function(e) {
    $(this).height(30);
    $(this).height(this.scrollHeight + parseFloat($(this).css("borderTopWidth")) + parseFloat($(this).css("borderBottomWidth")));
});

Đã thử nghiệm trong trình duyệt Chrome, Firefox và Android 2.3.3 hiện tại.

Bạn có thể thấy đèn flash của thanh cuộn trong một số trình duyệt. Thêm CSS này để giải quyết điều đó.

textarea{ overflow:hidden; }

nó không hoạt động tốt chút nào: / mỗi ký tự tôi gõ, nó thêm chiều cao.
vsync

1
Nó hoạt động hoàn hảo cho tôi! Chắc chắn không có gì trong mã đơn giản để làm những gì bạn nói.
drolex

1
vâng tôi thấy rồi, mã của bạn phải có dòng đặt chiều cao thành 30 ban đầu. đây có lẽ là một ilne không cần thiết bởi vì nó buộc nhà phát triển phải chỉnh sửa mã, thay vì mã hiểu và thích nghi với textarea,
vsync

1
Điều đó không chính xác. Nhà phát triển không cần chỉnh mã. Đặt chiều cao thành 30 là bắt buộc và nó hoạt động cho mọi thứ. Người dùng không bao giờ thấy điều đó xảy ra. Đó là cách nó có thể thu nhỏ vùng văn bản. Các mã không hiểu và thích ứng với textarea. Đó là toàn bộ điểm.
drolex

Bạn nói đúng. trang demo: jsbin.com/ObEcoza/2/edit (đặt chiều cao 1pxcó vẻ tốt hơn)
vsync

10

Để xác định một vùng văn bản có thể mở rộng tự động, bạn phải thực hiện hai điều:

  1. Mở rộng nó sau khi bạn nhấp vào phím Enter bên trong nó hoặc nhập nội dung nhiều hơn một dòng.
  2. thu nhỏ nó ở mờ để có được kích thước thực tế nếu người dùng đã vào khoảng trắng. ( Phần thưởng )

Dưới đây là một chức năng thủ công để hoàn thành nhiệm vụ.

Hoạt động tốt với hầu hết tất cả các trình duyệt (<IE7) . Đây là phương pháp:

    //Here is an event to get TextArea expand when you press Enter Key in it.
    // intiate a keypress event
    $('textarea').keypress(function (e) {  
       if(e.which == 13)   {   
       var control = e.target;                     
       var controlHeight = $(control).height();          
      //add some height to existing height of control, I chose 17 as my line-height was 17 for the control    
    $(control).height(controlHeight+17);  
    }
    }); 

$('textarea').blur(function (e) {         
    var textLines = $(this).val().trim().split(/\r*\n/).length;      
    $(this).val($(this).val().trim()).height(textLines*17);
    });

ĐÂY là một bài viết về điều này.


6

Tôi đã sử dụng plugin Textarea Expander jQuery trước đây với kết quả tốt.


1
Một hộp văn bản (yếu tố văn bản đầu vào tôi đoán) không phải là đa dòng. Sử dụng một textarea nhưng tạo kiểu cho nó một cách thích hợp - hàng, cột, v.v., sau đó sử dụng plugin tự động phát triển như trên.
richsage

4

Mọi người nên thử plugin jQuery này: xautoresize-jquery . Nó thực sự tốt và sẽ giải quyết vấn đề của bạn.


Điều này đã cho tôi kết quả tốt nhất và cũng dễ thực hiện.
blitzkid

4
function autosize(textarea) {
    $(textarea).height(1); // temporarily shrink textarea so that scrollHeight returns content height when content does not fill textarea
    $(textarea).height($(textarea).prop("scrollHeight"));
}

$(document).ready(function () {
    $(document).on("input", "textarea", function() {
        autosize(this);
    });
    $("textarea").each(function () {
        autosize(this);
    });
});

(Điều này sẽ không hoạt động trong Internet Explorer 9 trở lên vì nó sử dụng inputsự kiện này)


trong dự án của tôi, khi tôi thể hiện toàn bộ mọi thứ trong trang bằng Jquery và bản đánh máy, giải pháp của bạn là cách duy nhất để tôi có thể giải quyết vấn đề của mình nhờ
Harry Sarshogh

3

Tôi chỉ xây dựng chức năng này để mở rộng textareas trên pageload. Chỉ cần thay đổi eachthành keyupvà nó sẽ xảy ra khi textarea được gõ vào.

// On page-load, auto-expand textareas to be tall enough to contain initial content
$('textarea').each(function(){
    var pad = parseInt($(this).css('padding-top'));
    if ($.browser.mozilla) 
        $(this).height(1);
    var contentHeight = this.scrollHeight;
    if (!$.browser.mozilla) 
        contentHeight -= pad * 2;
    if (contentHeight > $(this).height()) 
        $(this).height(contentHeight);
});

Đã thử nghiệm trong Chrome, IE9 và Firefox. Thật không may, Firefox có lỗi này trả về giá trị không chính xác scrollHeight, vì vậy đoạn mã trên có một cách giải quyết (hacky) cho nó.


3

Tôi đã sửa một vài lỗi trong câu trả lời do Reigel cung cấp (câu trả lời được chấp nhận):

  1. Thứ tự thay thế các thực thể html bây giờ không gây ra mã không mong muốn trong phần tử bóng. (Bản gốc thay thế ">" bằng "& ampgt;", gây ra tính toán sai về chiều cao trong một số trường hợp hiếm gặp).
  2. Nếu văn bản kết thúc bằng một dòng mới, bóng bây giờ sẽ có thêm một ký tự "#", thay vì có chiều cao được thêm cố định, như trường hợp trong bản gốc.
  3. Thay đổi kích thước vùng văn bản sau khi khởi tạo sẽ cập nhật độ rộng của bóng.
  4. thêm word-quấn: break-word cho bóng, vì vậy nó phá vỡ giống như một textarea (buộc ngắt cho các từ rất dài)

Có một số vấn đề còn lại liên quan đến không gian. Tôi không thấy một giải pháp cho không gian kép, chúng được hiển thị dưới dạng các khoảng trắng trong bóng tối (kết xuất html). Điều này không thể được thực hiện bằng cách sử dụng & nbsp;, vì các khoảng trắng sẽ bị phá vỡ. Ngoài ra, textarea phá vỡ một dòng sau một khoảng trắng, nếu không có chỗ cho không gian đó, nó sẽ phá vỡ dòng ở một điểm trước đó. Đề nghị được chào đón.

Mã sửa lỗi:

(function ($) {
    $.fn.autogrow = function (options) {
        var $this, minHeight, lineHeight, shadow, update;
        this.filter('textarea').each(function () {
            $this = $(this);
            minHeight = $this.height();
            lineHeight = $this.css('lineHeight');
            $this.css('overflow','hidden');
            shadow = $('<div></div>').css({
                position: 'absolute',
                'word-wrap': 'break-word',
                top: -10000,
                left: -10000,
                width: $this.width(),
                fontSize: $this.css('fontSize'),
                fontFamily: $this.css('fontFamily'),
                lineHeight: $this.css('lineHeight'),
                resize: 'none'
            }).appendTo(document.body);
            update = function () {
                shadow.css('width', $(this).width());
                var val = this.value.replace(/&/g, '&amp;')
                                    .replace(/</g, '&lt;')
                                    .replace(/>/g, '&gt;')
                                    .replace(/\n/g, '<br/>')
                                    .replace(/\s/g,'&nbsp;');
                if (val.indexOf('<br/>', val.length - 5) !== -1) { val += '#'; }
                shadow.html(val);
                $(this).css('height', Math.max(shadow.height(), minHeight));
            };
            $this.change(update).keyup(update).keydown(update);
            update.apply(this);
        });
        return this;
    };
}(jQuery));

3

Mã của SpYk3HH có thêm kích thước thu nhỏ.

function get_height(elt) {
    return elt.scrollHeight + parseFloat($(elt).css("borderTopWidth")) + parseFloat($(elt).css("borderBottomWidth"));
}

$("textarea").keyup(function(e) {
    var found = 0;
    while (!found) {
        $(this).height($(this).height() - 10);
        while($(this).outerHeight() < get_height(this)) {
            $(this).height($(this).height() + 1);
            found = 1;
        };
    }
});

Bạn có thấy câu trả lời của tôi trước bạn không?
drolex

1
Giải pháp của bạn không phù hợp với tôi, có một số lỗi, tôi không nhớ là gì.
DSblizzard

2

Điều này làm việc cho tôi tốt hơn:

$('.resiText').on('keyup input', function() { 
$(this).css('height', 'auto').css('height', this.scrollHeight + (this.offsetHeight - this.clientHeight));
});
.resiText {
    box-sizing: border-box;
    resize: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea class="resiText"></textarea>


2

Mọi người dường như có những giải pháp rất hiệu quả ...

Đây là cách tôi làm điều đó:

  $('textarea').keyup(function()
  {
    var 
    $this  = $(this),
    height = parseInt($this.css('line-height'),     10),
    padTop = parseInt($this.css('padding-top'),     10),
    padBot = parseInt($this.css('padding-bottom'),  10);

    $this.height(0);

    var 
    scroll = $this.prop('scrollHeight'),
    lines  = (scroll  - padTop - padBot) / height;

    $this.height(height * lines);
  });

Điều này sẽ hoạt động với các dòng dài, cũng như ngắt dòng .. phát triển và co lại ..


1

Tôi đã viết chức năng jquery này dường như làm việc.

Bạn cần chỉ định chiều cao tối thiểu trong css và trừ khi bạn muốn thực hiện một số mã hóa, nó cần phải dài hai chữ số. tức là 12px;

$.fn.expand_ta = function() {

var val = $(this).val();
val = val.replace(/</g, "&lt;");
val = val.replace(/>/g, "&gt;");
val += "___";

var ta_class = $(this).attr("class");
var ta_width = $(this).width();

var min_height = $(this).css("min-height").substr(0, 2);
min_height = parseInt(min_height);

$("#pixel_height").remove();
$("body").append('<pre class="'+ta_class+'" id="pixel_height" style="position: absolute; white-space: pre-wrap; visibility: hidden; word-wrap: break-word; width: '+ta_width+'px; height: auto;"></pre>');
$("#pixel_height").html(val);

var height = $("#pixel_height").height();
if (val.substr(-6) == "<br />"){
    height = height + min_height;
};
if (height >= min_height) $(this).css("height", height+"px");
else $(this).css("height", min_height+"px");
}

1

Đối với bất kỳ ai sử dụng plugin được đăng bởi Reigel, vui lòng lưu ý rằng điều này sẽ vô hiệu hóa chức năng hoàn tác trong Internet Explorer (hãy dùng thử bản demo).

Nếu đây là một vấn đề cho bạn thì tôi sẽ đề nghị sử dụng plugin được đăng bởi @richsage, vì nó không gặp phải vấn đề này. Xem điểm đầu dòng thứ hai trên Tìm kiếm Textarea thay đổi kích thước tối đa để biết thêm thông tin.



1

Tôi muốn hình ảnh động và tự động thu nhỏ. Sự kết hợp rõ ràng là khó khăn, bởi vì mọi người đã đưa ra các giải pháp khá mãnh liệt cho nó. Tôi cũng đã làm cho nó nhiều bằng chứng văn bản. Và nó không quá nặng nề như plugin jQuery.

Tôi đã dựa vào câu trả lời của vsync (và sự cải thiện mà anh ấy đã thực hiện), http://codepen.io/anon/pen/vlIwj là bản mã cho sự cải tiến của tôi.

HTML

<textarea class='autoExpand' rows='3' data-min-rows='3' placeholder='Auto-Expanding Textarea'></textarea>

CSS

body{ background:#728EB2; }

textarea{  
  display:block;
  box-sizing: padding-box;
  overflow:hidden;

  padding:10px;
  width:250px;
  font-size:14px;
  margin:50px auto;
  border-radius:8px;
  border:6px solid #556677;
  transition:all 1s;
  -webkit-transition:all 1s;
}

Mã não

var rowheight = 0;

$(document).on('input.textarea', '.autoExpand', function(){
    var minRows = this.getAttribute('data-min-rows')|0,
        rows    = this.value.split("\n").length;
    $this = $(this);
    var rowz = rows < minRows ? minRows : rows;
    var rowheight = $this.attr('data-rowheight');
    if(!rowheight){
      this.rows = rowz;
      $this.attr('data-rowheight', (this.clientHeight  - parseInt($this.css('padding-top')) - parseInt($this.css('padding-bottom')))/ rowz);
    }else{
      rowz++;
      this.style.cssText = 'height:' + rowz * rowheight + 'px'; 
    }
});

Lưu ý: tôi đã nhận thấy rằng đôi khi nó hoạt động tốt hơn với kích thước hộp: hộp nội dung. Tôi không hoàn toàn chắc chắn tại sao, mặc dù vậy, nó nên xử lý phần đệm một cách chính xác :(
Lodewijk

1

Có rất nhiều câu trả lời cho điều này nhưng tôi đã tìm thấy một điều rất đơn giản, đính kèm một sự kiện keyup vào textarea và kiểm tra phím enter nhấn mã phím là 13

keyPressHandler(e){ if(e.keyCode == 13){ e.target.rows = e.target.rows + 1; } }

Điều này sẽ thêm một hàng khác cho bạn textarea và bạn có thể định kiểu chiều rộng bằng CSS.


1

Giả sử bạn đang cố gắng thực hiện điều này bằng cách sử dụng Knockout ... đây là cách:

Trong trang:

<textarea data-bind="event: { keyup: $root.GrowTextArea }"></textarea>

Trong mô hình xem:

self.GrowTextArea = function (data, event) {
    $('#' + event.target.id).height(0).height(event.target.scrollHeight);
}

Điều này sẽ hoạt động ngay cả khi bạn có nhiều textareas được tạo bởi một foreach Knockout như tôi.


1

Giải pháp đơn giản:

HTML:

<textarea class='expand'></textarea>

JS:

$('textarea.expand').on('input', function() {
  $(this).scrollTop($(this).height());
});
$('textarea.expand').scroll(function() {
  var h = $(this).scrollTop();
  if (h > 0)
    $(this).height($(this).height() + h);
});

https://fiddle.jshell.net/7wsnwbzg/


1

Giải pháp đơn giản nhất:

html:

<textarea class="auto-expand"></textarea>

css:

.auto-expand {
    overflow:hidden;
    min-height: 80px;
}

js (jquery):

$(document).ready(function () {
 $("textarea.auto-expand").focus(function () {
        var $minHeight = $(this).css('min-height');
        $(this).on('input', function (e) {
            $(this).css('height', $minHeight);
            var $newHeight = $(this)[0].scrollHeight;
            $(this).css('height', $newHeight);
        });
    });       
});

1

Giải pháp với JS thuần túy

function autoSize() {
  if (element) {
    element.setAttribute('rows', 2) // minimum rows
    const rowsRequired = parseInt(
      (element.scrollHeight - TEXTAREA_CONFIG.PADDING) / TEXTAREA_CONFIG.LINE_HEIGHT
    )
    if (rowsRequired !== parseInt(element.getAttribute('rows'))) {
      element.setAttribute('rows', rowsRequired)
    }
  }
}

https://jsfiddle.net/Samb102/cjqa2kf4/54/


1

Đây là giải pháp tôi đã sử dụng. Tôi muốn một giải pháp nội tuyến, và điều này cho đến nay dường như hoạt động rất tốt:

<textarea onkeyup="$(this).css('height', 'auto').css('height', this.scrollHeight + this.offsetHeight - this.clientHeight);"></textarea>

1

function autoResizeTextarea() {
  for (let index = 0; index < $('textarea').length; index++) {
    let element = $('textarea')[index];
    let offset = element.offsetHeight - element.clientHeight;
    $(element).css('resize', 'none');
    $(element).on('input', function() {
      $(this).height(0).height(this.scrollHeight - offset - parseInt($(this).css('padding-top')));
    });
  }
}

https://codepen.io/nanachi1/pen/rNNKrzQ

cái này nên hoạt động


0

@Georgiy Ivankin đã đưa ra một đề nghị trong một bình luận, tôi đã sử dụng nó thành công :) -, nhưng với những thay đổi nhỏ:

$('#note').on('keyup',function(e){
    var maxHeight = 200; 
    var f = document.getElementById('note'); 
    if (f.clientHeight < f.scrollHeight && f.scrollHeight < maxHeight ) 
        { f.style.height = f.scrollHeight + 'px'; }
    });      

Nó dừng mở rộng sau khi đạt đến chiều cao tối đa 200px


0

Câu hỏi cũ nhưng bạn có thể làm một cái gì đó như thế này:

html:

<textarea class="text-area" rows="1"></textarea>

jquery:

var baseH; // base scroll height

$('body')
    .one('focus.textarea', '.text-area', function(e) {
        baseH = this.scrollHeight;
    })
    .on('input.textarea', '.text-area', function(e) {
        if(baseH < this.scrollHeight) {
            $(this).height(0).height(this.scrollHeight);
        }
        else {
            $(this).height(0).height(baseH);
        }
    });

Bằng cách này, tự động thay đổi kích thước sẽ áp dụng cho bất kỳ vùng văn bản nào có lớp "vùng văn bản". Cũng thu nhỏ khi văn bản được gỡ bỏ.

jsfiddle:

https://jsfiddle.net/rotaercz/46rhcqyn/


0

Thử cái này:

  $('textarea[name="mytextarea"]').on('input', function(){
    $(this).height('auto').height($(this).prop('scrollHeight') + 'px');
  }).trigger('input');

0

Giải pháp jQuery đơn giản:

$("textarea").keyup(function() {
    var scrollHeight = $(this).prop('scrollHeight') - parseInt($(this).css("paddingTop")) - parseInt($(this).css("paddingBottom"));

    if (scrollHeight > $(this).height()) {
        $(this).height(scrollHeight + "px");
    }
});

HTML:

<textarea rows="2" style="padding: 20px; overflow: hidden; resize: none;"></textarea>

Tràn nên được ẩn . Thay đổi kích thước không có nếu bạn không muốn làm cho nó thay đổi kích thước bằng chuột.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.