Количество символов в текстовой области jQuery (включая возврат каретки)

У меня есть функция jQuery, в которой я подсчитываю символы, оставшиеся после нажатия клавиши.

function charactersLeft(e) {
    var textArea = e.data.textArea,
            charLeft = e.data.maxLength - textArea.val().length,
            message = e.data.messageContainer;

    if (charLeft < e.data.warningLength) {
        message.addClass('red').removeClass('green');
    }
    else {
        message.addClass('green').removeClass('red');
    }

    message.text(charLeft);
}

Этот работает нормально, но он считает возврат каретки одним символом вместо двух. Это вызывает проблему при передаче на сервер, поскольку возврат каретки передается как '\r\n'.

Что я могу сделать, чтобы изменить свой код, чтобы всякий раз, когда я нажимаю ввод, счетчик символов вычитал 2 вместо 1 и добавлял 2 вместо 1 при удалении возврата каретки?

Спасибо :)


person dork    schedule 21.01.2013    source источник


Ответы (2)


условие if на keyup?

Ввод чего-то вроде if(e.which==13){charLeft--}. Это вычтет один дополнительный счет.

person beNerd    schedule 21.01.2013
comment
Привет! Спасибо за ваш ответ. Я уже пробовал это, и это работает с первой попытки, но не с последующим возвратом каретки. (странный) - person dork; 21.01.2013
comment
о, ладно, я знаю, почему. это потому, что я снова подсчитываю введенные символы перед вызовом charLeft--; - person dork; 21.01.2013
comment
да, вы должны сохранить значение для charLeft, чтобы это работало. - person beNerd; 21.01.2013

ниже приведен код, который вы ищете.

приведенный ниже код также протестирован.

<script type="text/javascript" src="js/jquery.js"></script>

<script type="text/javascript">

(function($)
{ 
    $.fn.extend(
    {
        limit: function(limit,element)
        {
            var interval, f;
            var self = $(this);

            $(this).focus(function()
            {
                interval = window.setInterval(substring,100);
            });

            $(this).blur(function()
            {
                clearInterval(interval);
                substring();
            });

            substringFunction = "function substring(){ var val = $(self).val();var length = val.length;if(length > limit){$(self).val($(self).val().substring(0,limit));}";
            if(typeof element != 'undefined')
                substringFunction += "if($(element).html() != limit-length){$(element).html((limit-length<=0)?'0':limit-length);}"

            substringFunction += "}";

            eval(substringFunction);
            substring();
        } 
    }); 
})(jQuery);

</script>

<textarea id="myTextarea"></textarea>
<script type="text/javascript">
    $(document).ready(function()
    {
        $('#myTextarea').limit('140','#charsLeft');
    });    
</script>
<div id="charsLeft"></div>
person Dipesh Parmar    schedule 21.01.2013