jQuery:实时计算单词

den*_*icz 8 javascript jquery

我使用以下jQuery功能实时计算单词:

$("input[type='text']:not(:disabled)").each(function(){
            var input = '#' + this.id;
            word_count(input);

            $(this).keyup(function(){
                word_count(input);
            })

        });

var word_count = function(field) {
        var number = 0;
        var original_count = parseInt($('#finalcount').val());
        var matches = $(field).val().match(/\b/g);
        if(matches) {
            number = matches.length/2;
        }
        $('#finalcount').val(original_count + number)
    }
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,当我开始在输入字段中输入时,计数会立即增加2,即使在空格和我的删除键上也是如此.有什么想法会发生这种情况吗?

我正在学习本教程:http://www.electrictoolbox.com/jquery-count-words-textarea-input/

输入: <input class="widest" id="page_browser_title" name="page[browser_title]" size="30" type="text" value="">

显示输入: <input class="widest" disabled="disabled" id="finalcount" name="page[word_count]" size="30" type="text" value="662">

gil*_*ly3 14

每次按键都会递增,因为你告诉它:

$('#finalcount').val(original_count + number)
Run Code Online (Sandbox Code Playgroud)

如果你添加另一个单词,你会发现它的增量不是2,而是增加3.大概你在页面上有几个输入,你打算让finalcount输入显示每个输入中的单词数.将计数存储在变量中并将变量添加到一起以获取最终计数值.或者每次计算每个输入中的单词.

var wordCounts = {};

function word_count (field) {
    var number = 0;
    var matches = $(field).val().match(/\b/g);
    if (matches) {
        number = matches.length / 2;
    }
    wordCounts[field] = number;
    var finalCount = 0;
    $.each(wordCounts, function(k, v) {
        finalCount += v;
    });
    $('#finalcount').val(finalCount)
}
Run Code Online (Sandbox Code Playgroud)

工作演示:http://jsfiddle.net/gilly3/YJVPZ/

编辑: 顺便说一下,你有一些机会通过删除一些冗余来简化你的代码.您可以用以下内容替换您发布的所有JavaScript:

var wordCounts = {};
$("input[type='text']:not(:disabled)").keyup(function() {
    var matches = this.value.match(/\b/g);
    wordCounts[this.id] = matches ? matches.length / 2 : 0;
    var finalCount = 0;
    $.each(wordCounts, function(k, v) {
        finalCount += v;
    });
    $('#finalcount').val(finalCount)
}).keyup();
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/gilly3/YJVPZ/1/