问题描述

如何将 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛