textarea字符限制

时间:2011-04-03 22:49:10

标签: javascript html textarea cross-browser

我希望能够限制textarea中的字符数。我使用的方法在谷歌浏览器中效果很好,但在Firefox中很慢,并且在IE中不起作用。

使用Javascript:

function len(){
  t_v=textarea.value;
  if(t_v.length>180){
    long_post_container.innerHTML=long_post;
    post_button.className=post_button.className.replace('post_it_regular','post_it_disabled');
    post_button.disabled=true;
  }
  else{
    long_post_container.innerHTML="";
    post_button.className=post_button.className.replace('post_it_disabled','post_it_regular');
    post_button.disabled=false;
  }
  if(t_v.length>186){
        t_v=t_v.substring(0,186);
    }
}

HTML:

<textarea id="user_post_textarea" name="user_post_textarea" cols="28" rows="1"  onkeypress="len();" onkeyup="len();"></textarea>

body元素底部的Javascript:

textarea=document.getElementById('user_post_textarea');

11 个答案:

答案 0 :(得分:69)

如果浏览器支持,我找到了一个使用maxlength属性的好解决方案,并在不支持的浏览器中回退到一个不显眼的javascript pollyfill。

感谢@Dan Tello's comment我修复了它,所以它也适用于IE7 +:

<强> HTML:

<textarea maxlength="50" id="text">This textarea has a character limit of 50.</textarea>

<强>使用Javascript:

function maxLength(el) {    
    if (!('maxLength' in el)) {
        var max = el.attributes.maxLength.value;
        el.onkeypress = function () {
            if (this.value.length >= max) return false;
        };
    }
}

maxLength(document.getElementById("text"));

<强> Demo

HTML5中有no such thingminlength属性 对于以下输入类型:numberrangedatedatetimedatetime-localmonthtime和{ {1}}(aren't fully supported yet}使用weekmin属性。

答案 1 :(得分:8)

这是完全未经测试但它应该做你需要的。

更新:这里有一个jsfiddle来看看。似乎工作。 link

您将它传递到js文件并在您的jquery引用之后引用它。 然后你会这样称呼它..

$("textarea").characterCounter(200);

对正在发生的事情的简要说明..

在每个keyup事件中,该函数正在检查按下了哪种类型的键。如果可以接受,计数器将检查计数,调整任何多余的数量,并在达到限制后阻止任何进一步的输入。

该插件也应该处理粘贴到目标中。

  ; (function ($) {
        $.fn.characterCounter = function (limit) {
            return this.filter("textarea, input:text").each(function () {
                var $this = $(this),
                  checkCharacters = function (event) {

                      if ($this.val().length > limit) {

                          // Trim the string as paste would allow you to make it 
                          // more than the limit.
                          $this.val($this.val().substring(0, limit))
                          // Cancel the original event
                          event.preventDefault();
                          event.stopPropagation();

                      }
                  };

                $this.keyup(function (event) {

                    // Keys "enumeration"
                    var keys = {
                        BACKSPACE: 8,
                        TAB: 9,
                        LEFT: 37,
                        UP: 38,
                        RIGHT: 39,
                        DOWN: 40
                    };

                    // which normalizes keycode and charcode.
                    switch (event.which) {

                        case keys.UP:
                        case keys.DOWN:
                        case keys.LEFT:
                        case keys.RIGHT:
                        case keys.TAB:
                            break;
                        default:
                            checkCharacters(event);
                            break;
                    }   

                });

                // Handle cut/paste.
                $this.bind("paste cut", function (event) {
                    // Delay so that paste value is captured.
                    setTimeout(function () { checkCharacters(event); event = null; }, 150);
                });
            });
        };
    } (jQuery));

答案 2 :(得分:2)

我认为这样做可能比大多数人想象的要容易!

试试这个:

var yourTextArea = document.getElementById("usertext").value;
// In case you want to limit the number of characters in no less than, say, 10
// or no more than 400.        
    if (yourTextArea.length < 10 || yourTextArea.length > 400) {
        alert("The field must have no less than 10 and no more than 400 characters.");
        return false;
    }

请让我知道这很有用。如果是这样,请投票! THX!

丹尼尔

答案 3 :(得分:1)

这适用于键盘和粘贴,当你几乎达到极限时,它会将文本颜色设置为红色,当你过去时将其截断并提醒你编辑你的文字,你可以这样做。

var t2 = / * textarea reference * /

t2.onkeyup= t2.onpaste= function(e){
    e= e || window.event;
    var who= e.target || e.srcElement;
    if(who){
        var val= who.value, L= val.length;
        if(L> 175){
            who.style.color= 'red';
        }
        else who.style.color= ''
        if(L> 180){
            who.value= who.value.substring(0, 175);
            alert('Your message is too long, please shorten it to 180 characters or less');
            who.style.color= '';
        }
    }
}

答案 4 :(得分:1)

使用textarea的maxlength属性可以解决这个问题...简单的html代码..不需要JS或JQuery或服务器端检查......

答案 5 :(得分:0)

尝试使用jQuery来避免跨浏览器兼容性问题......

$("textarea").keyup(function(){
    if($(this).text().length > 500){
        var text = $(this).text();
        $(this).text(text.substr(0, 500));   
    }
});

答案 6 :(得分:0)

快速而肮脏的通用jQuery版本。支持复制/粘贴。

$('textarea[maxlength]').on('keypress mouseup', function(){
    return !($(this).val().length >= $(this).attr('maxlength'));
});

答案 7 :(得分:0)

我相信如果你使用代表,它会工作..

$("textarea").on('change paste keyup', function () {
    var currText = $(this).val();
    if (currText.length > 500) {
        var text = $(this).text();
        $(this).text(text.substr(0, 500));
        alert("You have reached the maximum length for this field");
    }
});

答案 8 :(得分:-1)

我已经为此编写了我的方法,在浏览器上测试它并给我反馈。

欢呼声。

function TextareaControl(textarea,charlimit,charCounter){
    if(
            textarea.tagName.toLowerCase() === "textarea" && 
            typeof(charlimit)==="number" &&
            typeof(charCounter) === "object" && 
            charCounter.innerHTML !== null
    ){
        var oldValue = textarea.value;
        textarea.addEventListener("keyup",function(){
            var charsLeft = charlimit-parseInt(textarea.value.length,10);
            if(charsLeft<0){
                textarea.value = oldValue;
                charsLeft = charlimit-parseInt(textarea.value.length,10);
            }else{
                oldValue = textarea.value;
            }
            charCounter.innerHTML = charsLeft;
        },false);
    }
}

答案 9 :(得分:-1)

... onkeydown="if(value.length>500)value=value.substr(0,500); if(value.length==500)return false;" ...

它应该工作。

答案 10 :(得分:-1)

&#13;
&#13;
$RegistryKey = 'HKCU\Control Panel\Desktop'
$AuditIdentityReference = "Everyone"
$AuditRegistryRights = "SetValue,Delete"
$AuditInheritanceFlags = "ContainerInherit,ObjectInherit"
$AuditPropagationFlags = "None"
$AuditFlags = "success"
$AuditRule = New-Object System.Security.AccessControl.RegistryAuditRule ($AuditIdentityReference,$AuditRegistryRights,$AuditInheritanceFlags,$AuditPropagationFlags,$AuditFlags)
$ACL = Get-Acl $RegistryKey
$ACL.RemoveAuditRule($AuditRule)
$ACL | Set-Acl -Path $RegistryKey
Get-Acl $RegistryKey -Audit | Select Path -ExpandProperty Audit | fl *
&#13;
$Dir = 'C:\Testing'
$ACL = get-acl $Dir
$Rule = new-object System.Security.AccessControl.FileSystemAuditRule("Everyone","CreateDirectories,CreateFiles,Delete,DeleteSubdirectoriesAndFiles,Write,WriteData","ContainerInherit,ObjectInherit","None","Success,Failure")
$ACL.AddAuditRule($Rule)
$ACL | Set-Acl -Path $Dir
$ACL.RemoveAuditRule($Rule)
$ACL | Set-Acl -Path $Dir
&#13;
&#13;
&#13;