1

我正在尝试计算用户在文本区域中输入了多少字

$("#word_count").on('keyup', function() {        
         var text = $(this).val;
         word_c = $.trim(text).split(' ').length;
$('#display_count').text(word_c);
});

但是我总是得到错误的结果。我错过了什么?

http://jsfiddle.net/drxgw/

4

4 回答 4

3

两个问题:

  1. 您试图使用valjQuery 对象的属性,而不是val()方法(括号不是可选的),并且
  2. 您在以下行中声明了一个全局变量,纠正了这一点:

    $("#word_count").on('keyup', function () {
        var text = $(this).val(),
            word_c = $.trim(text).split(' ').length;
        $('#display_count').text(word_c);
    });
    

JS 小提琴演示

此外,您的代码中存在多个空白字符导致错误结果的问题(在上面的演示类型中,输入 'one[space][space][space]two' 并且计数将为 4);纠正这一点:

$("#word_count").on('keyup', function () {
    var text = $(this).val(),
        word_c = $.trim(text).split(/\s+/).length;
    $('#display_count').text(word_c);
});

JS 小提琴演示

允许字数限制:

$("#word_count").on('keydown', function (e) {
    var text = $(this).val(),
        words = $.trim(text).split(/\s+/),
        word_c = words.length;
    $('#display_count').text(word_c);
    return word_c < 21 || e.which == 8;
});

JS 小提琴演示

参考:

于 2013-09-18T17:35:49.723 回答
2

更改这行代码!

var text = $(this).val();

感谢先生。托马斯,这就是你需要的

$("#word_count").on('keyup', function () {
    var text = $(this).val(),
        word_c = $.trim(text).split(/\s+/).length;
    $('#display_count').text(word_c);
});

对于您对限制的评论,您可以这样做

$("#word_count").on('keydown', function () {
    var text = $(this).val(),
    word_c = $.trim(text).split(/\s+/).length;
    $('#display_count').text(word_c);
    if(word_c > 19)
       return false;
});

演示 JSFiddle

于 2013-09-18T17:34:08.747 回答
0
$("#word_count").on('keyup', function() {        
         var text = $(this).val();
         word_c = $.trim(text).split(' ').length;
$('#display_count').text(word_c);
});

您在 $(this).val 上缺少括号

于 2013-09-18T17:35:59.880 回答
0

尝试这个:

$("#word_count").on('keyup', function() {        
         var text = $(this).val();
         word_c = $.trim(text).split(/[ ]+/).length;
$('#display_count').text(word_c);
});

它还考虑由多个空格分隔的单词。拆分接受正则表达式。

于 2013-09-18T17:40:32.093 回答