我使用以下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/