2

キーアップに残っている文字を数える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);
}

これは正常に機能しますが、キャリッジリターンは2文字ではなく1文字としてカウントされます。これにより、キャリッジリターンが'\ r \ n'として渡されるため、サーバーに渡されるときに問題が発生します。

Enterキーを押すたびに、キャリッジリターンが削除されたときに、文字数が1ではなく2を減算し、1ではなく2を加算するように、コードを変更するにはどうすればよいですか?

ありがとうございました :)

4

2 に答える 2

0

キーアップのif条件?

のようなものを置きますif(e.which==13){charLeft--}。これにより、1つの余分なカウントが差し引かれます。

于 2013-01-21T08:14:19.630 に答える
0

以下はあなたが探しているコードです。

以下のコードもテストされています。

<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>
于 2013-01-21T08:17:04.603 に答える