搜尋

首頁  >  問答  >  主體

自動擴展文字區域

我正在嘗試做一個簡單的自動擴展文字區域。這是我的程式碼:

textarea.onkeyup = function () {
  textarea.style.height = textarea.clientHeight + 'px';
}

但是文字區域會隨著您的輸入而無限增長...

我知道有 Dojo 和 jQuery 插件可以實現此目的,但我不想使用它們。我查看了他們的實現,最初使用 scrollHeight 但做了同樣的事情。

您可以開始回答並使用文字區域來播放您的答案。

P粉245489391P粉245489391449 天前708

全部回覆(2)我來回復

  • P粉786800174

    P粉7868001742023-10-22 07:17:18

    我希望自動擴充區域受行數限制(例如 5 行)。我考慮過使用“em”單位,對於 Rob 的解決方案,但是,這是 容易出錯並且不會考慮填充等內容。

    這就是我的想法:

    var textarea = document.getElementById("textarea");
    var limitRows = 5;
    var messageLastScrollHeight = textarea.scrollHeight;
    
    textarea.oninput = function() {
        var rows = parseInt(textarea.getAttribute("rows"));
        // If we don't decrease the amount of rows, the scrollHeight would show the scrollHeight for all the rows
        // even if there is no text.
        textarea.setAttribute("rows", "1");
    
        if (rows < limitRows && textarea.scrollHeight > messageLastScrollHeight) {
            rows++;
        } else if (rows > 1 && textarea.scrollHeight < messageLastScrollHeight) {
            rows--;
        }
    
        messageLastScrollHeight = textarea.scrollHeight;
        textarea.setAttribute("rows", rows);
    };

    小提琴:http://jsfiddle.net/cgSj3/< /p>#

    回覆
    0
  • P粉447785031

    P粉4477850312023-10-22 00:31:05

    在使用scrollHeight正確擴展/縮小文字區域之前重置高度。 Math.min() 可用來設定文字區域高度的限制。

    程式碼:

    var textarea = document.getElementById("textarea");
    var heightLimit = 200; /* Maximum height: 200px */
    
    textarea.oninput = function() {
      textarea.style.height = ""; /* Reset the height*/
      textarea.style.height = Math.min(textarea.scrollHeight, heightLimit) + "px";
    };

    小提琴:http://jsfiddle.net/gjqWy/155

    注意:input 事件IE8 及更早版本不支援 。如果您也想支援這個古老的瀏覽器,請使用 keydownkeyup 以及 onpaste 和/或 oncut。 < /p>

    回覆
    0
  • 取消回覆