Javascript 长度未返回正确的值

Javascript 长度未返回正确的值,javascript,jquery,Javascript,Jquery,我有以下代码: $(document).ready(function (e) { $('#input').keydown(function (e) { var inpData_lenght = $(this).val().length+1; var max_length = 15; if (inpData_lenght >= max_length) { if (inpData_

我有以下代码:

$(document).ready(function (e) {

    $('#input').keydown(function (e)
    {
        var inpData_lenght = $(this).val().length+1;
        var max_length     = 15;
        if (inpData_lenght >= max_length)
        {
            if (inpData_lenght > max_length)
            {
                if ((e.keyCode != 8) && (e.keyCode != 46))
                {
                    e.stopImmediatePropagation();
                    e.preventDefault();
                }
            }

            $(this).css({'background-color': '#ff8080'});
        }
        else
        {
            $(this).css('background-color', '');
        }  
    });
});
HTML:


当存在
max_length-1
字符时,文本区域不会将背景变回白色,但仅在
max_length-3
上,是否有解决方法?我知道这与退格或删除字符有关


编辑:我只能使用keydown,因为这是插件支持的唯一与键相关的回调。

最好使用
keyup()
而不是
keydown()
,因为您将获得结果输入值。如果长度超过最大值,只需将输入值替换为上一个值


您可以使用如下内容,而不是使用javascript条件

<textarea maxlength="15" id="input"/>

使用keyup将解决您的问题。你应该想出一种方法来防止人们按下钥匙。(如果您按住钥匙2秒钟,将超过您的15个字符限制)


将maxlength和keyup结合起来应该是最简单的方法

<textarea id="input" maxlength=3></textarea>

请参阅小提琴:

如果您需要解决
键控
的问题,以下操作应该有效:

var maxLength = 15;
var currLength = this.value.length;
if (e.keyCode == 8 || e.keyCode == 46) {
    var expectedLength = currLength - 1; // distinguish here!
} else {
    var expectedLength = currLength + 1;
    if (expectedLength > maxLength) {
         e.stopImmediatePropagation();
         e.preventDefault();
    }
}
if (expectedLength >= maxLength)  {
    $(this).css('background-color', '#ff8080');
} else {
    $(this).css('background-color', '');
}  

然后使用我推荐的另一个插件。您使用的是什么?请注意,backspace和delete并不是您需要特别处理的唯一键:tab(带或不带shift)如何?箭头键呢?“…插件…”-什么插件?我在问题中没有看到任何插件代码。请注意,这不适用于较旧的浏览器(只支持
input
元素上的
maxlength
)。
<textarea id="input" maxlength=3></textarea>
$(document).ready(function (e) {

    $('#input').keyup(function (e)
    {
        var inpData_lenght = $(this).val().length;
        var max_length     = 3;
        if (inpData_lenght >= max_length)
        {
            $(this).css({'background-color': '#ff8080'});
        }
        else
        {
            $(this).css('background-color', '');
        }  
    });
});
var maxLength = 15;
var currLength = this.value.length;
if (e.keyCode == 8 || e.keyCode == 46) {
    var expectedLength = currLength - 1; // distinguish here!
} else {
    var expectedLength = currLength + 1;
    if (expectedLength > maxLength) {
         e.stopImmediatePropagation();
         e.preventDefault();
    }
}
if (expectedLength >= maxLength)  {
    $(this).css('background-color', '#ff8080');
} else {
    $(this).css('background-color', '');
}