0

我在 jquery 中创建了一个字数统计。

http://jsfiddle.net/DqYsN/

但是,如果用户按“Enter”(换行符),它将导致剩下 1 个字符。

前任。maxlength=10, 如果用户输入abcde , \n , abc

总共只有 9 个字符,div显示 1 个字符

$(document).ready(function(){   
    //Word Count
        $('.word_count')
        .on('input keyup keydown focus', function () {
            var maxlength = $(this).attr('maxlength');
            var value = $(this).val();

            if(value.length > 0) {
                $(this).nextAll('div').first().text((maxlength - $(this).val().length));
            } else {
                $(this).nextAll('div').first().text(maxlength);
            }   
        }); 
});

我只是在 textarea 中发现 Chrome 计数字符错误

Chrome 在具有 maxlength 属性的 textarea 中计算错误的字符

4

3 回答 3

1

Chrome 将换行符计为 2 个字符,把这个放在你的代码中应该没问题。

var isChrome = window.chrome;
if(isChrome){var value = $(this).val().replace(/(\r\n|\n|\r)/g,"  ");}
else{ var value = $(this).val();}

" "这使得长度为 2 个字符,因此它将与 chrome 中的 textarea 长度匹配

于 2013-06-18T11:57:44.683 回答
1

您可以像这样找到确切的字符长度(不包括任何空格和换行符

var length = $.trim($(this).val()).split(" ").join("").split('\n').join('').length;

演示-----> http://jsfiddle.net/DqYsN/1/

于 2013-06-18T10:56:40.317 回答
0

您可以在计数之前替换空格,例如:.replace(/\s/,'')

所以而不是:

$(this).val().length)

你做:

$(this).val().replace(/\s/,'').length)
于 2013-06-18T11:00:09.793 回答