首頁 >web前端 >js教程 >如何構建自動擴展Textarea jQuery插件,第1部分

如何構建自動擴展Textarea jQuery插件,第1部分

Jennifer Aniston
Jennifer Aniston原創
2025-03-08 00:38:10489瀏覽

自動擴展文本區域在 Facebook 等網站上很受歡迎。文本區域框的高度會根據用戶輸入的文本數量而擴展和收縮。這有幾個優點:

  1. 您的頁面設計不會被大型文本區域框佔據主導地位。
  2. 包含多個文本區域的在線表單看起來更短,完成起來也更容易。
  3. 用戶無需滾動即可查看所有文本。

查看擴展文本區域演示……

本分三部分的教程描述瞭如何使用 HTML 和可重用的 jQuery 插件構建自動擴展文本區域。在第三部分結束時,您將了解其工作原理,並擁有可在您自己的項目中使用的代碼。

需求

像所有優秀的開發者一樣,我們應該徹底了解系統需求:

  1. 任何頁面上的任何文本區域都應在我們需要時自動擴展。
  2. 但是,有些文本區域可能不需要自動擴展功能。
  3. 我們必須能夠指定文本區域高度可以 (a) 無限增長,或 (b) 在特定範圍內增長,例如,使用 50 到 200 像素之間的最佳高度。
  4. 我們的解決方案應該在我們選擇的任何頁面上都可重用。
  5. 應使用漸進增強技術,以確保沒有 JavaScript 的用戶仍然可以使用標准文本區域框。
  6. 該解決方案應與 IE6 、Firefox 2 、Opera、Safari 和 Chrome 兼容。

方案

我們將解決方案實現為一個 jQuery 插件。 jQuery 主要用於處理 DOM 嗅探和事件委託等更平凡的方面;您可以輕鬆地使用另一個框架重寫代碼。

但是,我們如何知道何時應該調整文本區域大小以及使用什麼高度呢?

首先,我們可以為任何文本區域分配一個“keyup”事件處理程序。這將在按下鍵並修改文本後立即調用一個函數。

然後,我們可以檢查 DOM scrollHeight 屬性。這將返回內部滾動部分的高度,即用戶輸入的文本的高度。如果我們將文本區域的高度設置為當前 scrollHeight 值,則滾動條將變得無關緊要。不幸的是,scrollHeight 不是 W3C 建議,並且我們需要克服一些跨瀏覽器不一致性:

  • 在 Firefox、Safari 和 Chrome 中,scrollHeight 永遠不會小於文本區域高度——即使沒有添加文本也是如此。因此,框會擴展,但刪除文本不會縮小它。我們可以通過暫時將文本區域高度設置為 0px,然後應用實際 scrollHeight 值來解決此問題。
  • 與 Mozilla scrollHeight 文檔相反,Firefox 似乎不包含文本區域填充,而 Safari 4 和 Chrome 2 包含。如果我們在頂部和底部有 2px 填充,則 scrollHeight 在 WebKit 瀏覽器中將大 4px,並且文本區域高度將無限增長。減去填充會破壞 Firefox,因此最簡單的解決方法是將 0px 垂直填充應用於我們的擴展文本區域元素。
  • 在 IE 和 Opera 中,scrollHeight 很古怪。它通常返回內部文本的真實高度,但是,將文本區域高度設置為 0px 會返回不正確的 scrollHeight 值。雖然瀏覽器嗅探很糟糕,但我認為在這種情況下我們沒有其他選擇。我們必須確保 IE 和 Opera 從不將文本區域高度設置為 0px。

我們還需要考慮滾動條。默認情況下,大多數瀏覽器僅在需要時才顯示文本區域滾動條。但是,如果我們將 overflow 設置為“auto”,則在添加新行時滾動條將出現,然後在更改文本區域高度時消失。將 overflow 設置為“hidden”將解決閃爍的滾動條問題,但這絕不能應用於非擴展文本區域或已擴展到其指定最大高度以外的文本區域。

最後,瀏覽器窗口調整大小可能是一個問題。流體網頁設計可以實現具有基於百分比的寬度的文本區域:調整窗口大小將調整框大小。雖然我們可以檢測窗口調整大小,但該事件在 IE 中表現不佳,並且會快速調用處理程序。我們可以解決這個問題,但是調整多個文本區域的大小可能會導致頁面設計跳動並混淆用戶。因此,在調整大小後,我們只會在用戶將焦點切換到該框後才調整文本區域的高度。

有很多內容需要吸收,而且還有更多內容!給自己衝杯咖啡,準備好迎接第二部分吧……

  • 第二部分:文本區域初始化
  • 第三部分:JavaScript 插件代碼
  • 如何開發 jQuery 插件

How to Build an Auto-Expanding Textarea jQuery Plugin, Part 1

以上是如何構建自動擴展Textarea jQuery插件,第1部分的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn