Javascript长度和文本区域maxlength don';不匹配

Javascript长度和文本区域maxlength don';不匹配,javascript,jquery,html,textarea,Javascript,Jquery,Html,Textarea,问题:我有一个javascript函数,它计算文本区域中的字符数并将其输出到我的控制台。我的文本区域也设置了maxlength。问题是,有时我的sum和textareamaxlength没有对齐 例如,textarea会阻止我的输入,但是sum变量会告诉我,我还剩下一些字符。特别是,当我快速键入或同时插入多个字符时 我怎样才能解决这个问题? 谢谢 HTML: <textarea maxlength="100"></textarea> var inputArea = $

问题:我有一个javascript函数,它计算文本区域中的字符数并将其输出到我的控制台。我的文本区域也设置了
maxlength

问题是,有时我的
sum
和textarea
maxlength
没有对齐

例如,textarea会阻止我的输入,但是sum变量会告诉我,我还剩下一些字符。特别是,当我快速键入或同时插入多个字符时

我怎样才能解决这个问题? 谢谢


HTML:

<textarea maxlength="100"></textarea>
var inputArea = $('textarea');
inputArea.keyup(function(){
   var sum = 100 - inputArea.val().length;
console.log(sum);
});
JSFiddle

试试按键,它可以工作:

不过最好是这样

编辑:

使用keydown&不要每次都从输入长度重新分配。()

var-inputArea=$('textarea.test');
var总和=100;
输入区域键控(功能(evt){
var evt=window.event?window.event:e;
var k=evt.keyCode?evt.keyCode:e.which;
如果(k>48){
如果(总和>0)总和--;
}
否则{

如果(sum您可能触发了太多的“keyup”事件,以至于当您一次键入fast或输入多个字符时,事件不一定会按照触发顺序结束,并且您最终得到的sum只有几个字符

您可能希望尝试一个小超时,并在每次启动新超时时取消该超时。类似于:

var timeoutVariable;
var inputArea = $('textarea');
inputArea.keyup(function(){
   window.clearTimeout(timeoutVariable);
   timeoutVariable = setTimeout(runSum(),100);
});

function runSum() {
   var sum = 100 - inputArea.val().length;
   console.log(sum);
}

我知道这是一个旧线程,但根据我的经验,它不匹配的唯一原因是换行符。如果在字段中按enter/return,则在maxlength验证中实际算作两个字符(\r\n),而不仅仅是一个(\n)就像大多数人期望的那样。也许这就是计数不匹配的问题?

尝试
更改
事件…我做了,它甚至不会更改值。检查这个-。有效fine@Sann:我能弄坏它..有办法吗?:d你的浏览器一定出了问题。它在我的浏览器上运行得很好。不,没有is也有同样的问题(对我来说)。尝试多次按enter键…(Win7上的Chrome)按键不会在退格时更新。只有在单击文本区域(onblur)之外的/tab键后,更改才会更新@jszobody是的,但是keypress在第一个字符按下时就更新了。嗯。但是在最后,总和仍然包含一个数字,textarea正在阻止输入。还有其他方法吗?谢谢。这看起来是一个有趣的解决方案,但我仍然可以“混淆”sum变量..真的吗?到目前为止我还不能将其中断。请尝试将100毫秒的时间增加一点。不,它会中断。按enter键并退格几次..:)啊,回车键。我看到一些浏览器将其计算为两个字符,这是不一致的。换行符会影响字符数。请参阅和。如果有换行符,则javascript.length将在匹配maxlength检查时遇到问题。
var timeoutVariable;
var inputArea = $('textarea');
inputArea.keyup(function(){
   window.clearTimeout(timeoutVariable);
   timeoutVariable = setTimeout(runSum(),100);
});

function runSum() {
   var sum = 100 - inputArea.val().length;
   console.log(sum);
}