繁体   English   中英

Textarea计数字符无法按需工作

[英]Textarea count characters not working as needed

我有简单的脚本字符计数器,但是我不明白为什么它显示5或其他任何小于10的数字作为剩余字符。它必须显示出剩余的“ 0”字符,并且如果我将一些文本粘贴到其中也没有计数文字区域。 我怎样才能解决这个问题?

HTML代码

<textarea name="" id="txtarea" cols="30" rows="10"></textarea>
<p id="demo"></p>

JS代码

var txt = document.getElementById("txtarea");
txt.setAttribute("maxlength", 50)
var maxLength = 50;
var demo = document.getElementById("demo");
var checkLength = function(){
    if(txt.value.length < maxLength) {
        var result = demo.innerHTML =  " Character remaining: " + (maxLength-txt.value.length) 
    };  
};
setInterval(checkLength, 300);

这是问题所在: if(txt.value.length < maxLength)

应该是: if(txt.value.length <= maxLength)

无论如何,我不会在一个时间间隔内执行此操作,而是在keyDown事件上执行。 像这样:

 var txt = document.getElementById("txtarea"); txt.setAttribute("maxlength", 50) var maxLength = 50; var demo = document.getElementById("demo"); var checkLength = function(){ if(txt.value.length <= maxLength) { var result = demo.innerHTML = " Character remaining: " + (maxLength-txt.value.length) }; }; 
 <textarea name="" id="txtarea" cols="30" onKeyDown="checkLength()" rows="10"></textarea> <p id="demo"></p> 

如@jolmos所说,您必须检查它是否小于或等于。 您只是在检查是否小于此值,因此它将永远不会显示“ 0”作为剩余字符数。

第二,关于粘贴时不计数的问题,请尝试将此checkLength()函数绑定到keyup / keydown事件,而不是从interval调用它。

尝试这个:

txt.addEventListener("keyup", function() {
if(txt.value.length <= maxLength) {
    var result = demo.innerHTML =  " Character remaining: " + (maxLength-txt.value.length) 
};
}

如果您快速键入,它将永远不会显示剩余的4或5个字符。 更好的解决方案是在其上放置一个onchange事件。 是的,应该为<= :)

除了它应该是txt.value.length <= maxLength的事实之外,这应该工作得很好(请查看此小提琴https://jsfiddle.net/Aides/nc39hsng/

您也可以使用onkeyuponchange代替setInterval

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM