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