1

次のコードがあります。

$(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>

(フィドル)

max_length-1文字がある場合、テキストエリアは背景を白に戻しませんが、オンmax_length-3になっている場合のみです。回避策はありますか? 文字としてカウントされるバックスペースまたは削除に関係していることは承知しています。

編集:プラグインがサポートする唯一のキー関連のコールバックであるため、キーダウンのみを使用できます。

4

5 に答える 5

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();
    });
});
于 2013-07-09T11:07:40.457 に答える
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', '');
}  
于 2013-07-09T12:08:19.870 に答える