长度未返回正确的值

时间:2013-07-09 11:05:31

标签: 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_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:

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

(fiddle)

max_length-1个字符只有max_length-3时,textarea不会将背景更改为白色,是否有解决方法?我知道这与计算为字符的退格键或删除键有关。

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

5 个答案:

答案 0 :(得分:3)

最好使用keyup()代替keydown(),因为您将获得结果输入值。如果长度超过最大值,只需将输入值替换为前一个。 http://jsfiddle.net/9Ed8h/

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

    $('#input').keyup(function (e)
    {
        var inpData_lenght = $(this).val().length;
        var max_length     = 15;
        if (inpData_lenght >= max_length)
        {
            if (inpData_lenght > max_length)
            {
                $(this).val(this.lastValue);
            }

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

答案 1 :(得分:0)

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

How to disable repetitive keydown in jQuery

答案 2 :(得分:0)

组合maxlength和keyup应该是最简单的方法。

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

请参阅小提琴:http://jsfiddle.net/DEjgd/4/

答案 3 :(得分:0)

如果您需要keydown的解决方法,则以下内容应该有效:

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

答案 4 :(得分:-1)

您可以使用类似

的内容,而不是使用javascript条件
<textarea maxlength="15" id="input"/>