所有文本区域中的总字数



我正在计算用户在每个文本区域中键入的单词数量,并将它们相加,然后在用户键入时显示给用户

$("[class^='count[']").bind('keyup click blur focus change paste', function() {
    sum = 0;
        $("[class^='count[']").each(function() {
            var Words = jQuery.trim($(this).val()).split(' ').length;
            sum += Number(Words);
            if($(this).val() === '') { sum = 0; }
            $('#maxwords').children('span').text(sum);

        });

});

这是我的HTML:

<ul id="forms">
            <li><textarea name="PresentationAbstract1"  id="PresentationAbstract1"style="width:700px"></textarea></li>
            <li><textarea name="PresentationAbstract2"  id="PresentationAbstract2"style="width:700px"></textarea></li>
            <li><textarea name="PresentationAbstract3"  id="PresentationAbstract3"style="width:700px"></textarea></li>

            <li id="maxwords">Total words (<span>0</span>)</li>
        </ul>

然而,问题是,直到你到达最后一个文本区域(在本例中是第三个(,这个代码才输出任何内容。一旦你点击最后一个文字区域,它就会计算单词量并输出。

以下是所需项目的URL:http://www.meetingproceedings.com/harvester2/wordcount.html.任何想法都将不胜感激。

使用代码可以改进一些地方,但最突出的是$('#maxwords').children('span').text(sum);.each()迭代中。这将使您的代码在每次计算文本区域中的字数时编写字数。然后是if($(this).val() === '') { sum = 0; }行,如果文本区域内没有任何内容,它会重置字数(这就是为什么在第三个文本区域上写入时,字数只"输出"到跨度的原因(。

试试这个代码:

$(function() {
    var countWords = function () {
        var sum = 0;
        $("textarea").each(function() {
            var words = $(this).val().split(' ');
            $.each(words, function(i, v) {
                if ($.trim(v) !== '') {sum++;}
            });
        });
        $('#maxwords span').text(sum);
    };
    // this binds our counting function to the textareas
    $("textarea").bind('keyup click blur focus change paste', countWords);
    // let's run this on document ready
    countWords();
});

这是一个O(n^2)算法(或者更确切地说是O(nm)(,但它可以正确地检查重复的空白。您最好尝试与正则表达式进行匹配,以降低复杂性。

这正在处理我的jsFiddle。

编辑

更新了解决方案,以便在文档就绪时也运行计数功能。或者,您也可以将ready处理程序添加到textarea绑定(即$("textarea").bind('ready keyup click blur focus change paste', countWords)(中,而不是调用函数本身,这也应该上升到文档就绪处理程序,但我只是更喜欢将其写出来,以便它变得清晰。

为什么有这行?尝试删除它。

if($(this).val() === '') { sum = 0; }

如果你遇到一个空字段,它会导致你将总和重置为零,直到填充字段后的所有字段都有内容为止。

$("#form textarea").live('KeyUp', function(){
var sum = 0;
$("#form textarea").each(function(){
   sum+= $(this).val().split(' ').length;
});
//put sum in your span
});

若你们想让它是实时的,你们必须在keyup事件上工作。

相关内容

  • 没有找到相关文章

最新更新