問題描述

如何將 maxlength 設定為 textarea?為什麼 maxlengthtextarea 中不能正常工作?

最佳解決方案

在 HTML5 之前,我們有一個簡單但可行的方法:首先在 textarea 元素中設定一個 maxlength 屬性:

<textarea maxlength='250' name=''></textarea>  

然後使用 JavaScript 來限制使用者輸入:

$(function() {  
    $("textarea[maxlength]").bind('input propertychange', function() {  
        var maxLength = $(this).attr('maxlength');  
        if ($(this).val().length > maxLength) {  
            $(this).val($(this).val().substring(0, maxLength));  
        }  
    })  
});

確保繫結”input” 和”propertychange” 事件使其在各種瀏覽器 (如 Firefox /Safari 和 IE) 上工作。

次佳解決方案

如果使用 HTML 5,則需要在 DOCTYPE 宣告中指定。

對於有效的 HTML 5 檔案,應從以下開始:

<!DOCTYPE html>

在 HTML 5 之前,textarea 元素沒有 maxlength 屬性。

您可以在 DTD/spec 中看到這一點:

<!ELEMENT TEXTAREA - - (#PCDATA)       -- multi-line text field -->
<!ATTLIST TEXTAREA
  %attrs;                              -- %coreattrs, %i18n, %events --
  name        CDATA          #IMPLIED
  rows        NUMBER         #REQUIRED
  cols        NUMBER         #REQUIRED
  disabled    (disabled)     #IMPLIED  -- unavailable in this context --
  readonly    (readonly)     #IMPLIED
  tabindex    NUMBER         #IMPLIED  -- position in tabbing order --
  accesskey   %Character;    #IMPLIED  -- accessibility key character --
  onfocus     %Script;       #IMPLIED  -- the element got the focus --
  onblur      %Script;       #IMPLIED  -- the element lost the focus --
  onselect    %Script;       #IMPLIED  -- some text was selected --
  onchange    %Script;       #IMPLIED  -- the element value was changed --
  %reserved;                           -- reserved for possible future use --
  >

為了限制輸入到 textarea 的字元數,您需要使用 JavaScript 與 onChange 事件。然後,您可以對字元數進行計數,並禁止進一步輸入。

Here 是關於文字輸入的 in-depth 討論,以及如何使用伺服器端和客戶端指令碼來限制大小。

Here 是另一個樣品。

第三種解決方案

在 html4 中為 textarea 做最大長度的簡單方法是:

<textarea cols="60" rows="5" onkeypress="if (this.value.length > 100) { return false; }"></textarea>

將”100″ 更改為所需的許多字元

第四種方案

正如我在 aqingsao 的回答中所說的那樣,當 textarea 有換行符時,至少在 Windows 上不行。

我稍稍改變了答案:

$(function() {
    $("textarea[maxlength]").bind('input propertychange', function() {
        var maxLength = $(this).attr('maxlength');
        //I'm guessing JavaScript is treating a newline as one character rather than two so when I try to insert a "max length" string into the database I get an error.
        //Detect how many newlines are in the textarea, then be sure to count them twice as part of the length of the input.
        var newlines = ($(this).val().match(/n/g) || []).length
        if ($(this).val().length + newlines > maxLength) {
            $(this).val($(this).val().substring(0, maxLength - newlines));
        }
    })
});

現在,當我嘗試使用換行符貼上大量資料時,我將獲得正確的字元數。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇