2

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

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

我该如何解决这个问题?谢谢


HTML:

<textarea maxlength="100"></textarea>

Javascript:

var inputArea = $('textarea');
inputArea.keyup(function(){
   var sum = 100 - inputArea.val().length;
console.log(sum);
});

JSFiddle:http: //jsfiddle.net/RnTHJ/3/

4

3 回答 3

1

尝试按键,它可以工作:http: //jsfiddle.net/RnTHJ/4/

最好是使用更改事件

编辑:

如何使用 keydown 而不是每次都从输入长度重新分配。(小提琴

var inputArea = $('textarea.test');

var sum = 100;

inputArea.keydown(function (evt) {
    var evt = window.event ? window.event : e;
    var k = evt.keyCode ? evt.keyCode : e.which;

    if(k>48) { 
        if(sum>0) sum--;
    }
    else {
         if(sum<100) sum++;   
    }

    $(this).siblings().text(sum);
});

作为一个样本,我只检查一个随机案例 48...如果可能的话,你可以检查所有的字母和数字。退格键使用其键码显式检查。

于 2013-03-29T03:14:51.750 回答
1

您可能会触发如此多的“keyup”事件,以至于当您快速键入或一次输入多个字符时,这些事件不一定会完成它们被触发的顺序,并且您最终会得到一个旧字符的总和。

您可能想尝试一个小超时,并在每次启动新超时时取消超时。就像是:

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);
}

http://jsfiddle.net/RnTHJ/8/

于 2013-03-29T03:17:27.593 回答
0

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

于 2015-08-22T18:45:01.243 回答