[英]How to do JavaScript to Count how many remaining words are on a combination of 4 textarea fields
[英]Multiple textarea remaining words count with javascript
我最近在这里发布了一个问题,即使我得到了很好的答案,也解决不了我的问题,所以我又来了。
原始问题: 如何使用JavaScript计算4个textarea字段组合中剩余的单词数
情况如下:
我有一个包含5个字段的文本框的页面。 考虑到第一个单词的单词数有限制,另外四个单词的单词数也有限制。 我需要向用户显示他对于第一个文本框和其他4个文本框还剩余多少个单词。此外,一旦限制增加,也不允许用户插入更多单词。
这是到目前为止我最接近的事情。 它计算剩余的单词,但让用户添加额外的单词。 我尝试将MyTextBox的attr更改为只读,但是一旦达到极限,便无法编辑。
请帮忙。 :)
HTML
<textarea id="MyTextBox1" class="MyTextBox" cols="60" rows="8"></textarea>
<textarea id="MyTextBox2" class="MyTextBox" cols="60" rows="8"></textarea>
<textarea id="MyTextBox3" class="MyTextBox" cols="60" rows="8"></textarea>
<textarea id="MyTextBox4" class="MyTextBox" cols="60" rows="8"></textarea>
<p><span id="remainingWords"></span> Words Remaining</p>
<p><span id="ExtraWords" style="font-family: Cambria; font-size: large; color: Red;"></span></p>
JavaScript的
var WordsLimit = 10;
var WordsUsed = 0;
var WordsRemaining = 10;
var regex = /\s+/gi;
$(document).ready(function () {
$('.MyTextBox').live("keyup", function (e) {
var v = "";
$('.MyTextBox').each(function() { v = v + " " + $(this).val().trim(); });
v = v.trim();
console.log(v);
var WordsUsed = v.replace(regex, ' ').split(' ').length;
WordsRemaining = parseInt(WordsLimit) - parseInt(WordsUsed);
if (WordsUsed == WordsLimit) {
$('.MyTextBox').readOnly = true;
$('#remainingWords').html("0 Words remaining.");
$('#ExtraWords').html("");
}
else if (WordsUsed > WordsLimit) {
$('#remainingWords').html("0");
document.getElementById('MyTextBox1').readOnly = true;
var extraWord = parseInt(WordsUsed) - parseInt(WordsLimit);
$('#ExtraWords').html("You have entered " + extraWord + " extra Words!!");
} else {
$('#remainingWords').html(WordsRemaining);
}
});
});
更新
好的,我可能对此有些过分,但这是一个新的小提琴: http : //jsfiddle.net/2b6agtt9/10/
看一看。 我想这就是你想要的。 如何处理最后一个单词的问题有点棘手,但是在此示例中,只要没有空格,制表符,输入,点或逗号,它就可以是任何东西。 如果愿意,您可以附加更多键码以禁止使用。 我很乐意解释一下代码的某些部分是否不能自我解释。
旧答案如下
除了使textarea只读之外,还可以禁止除退格键之外的任何其他输入:
$('#MyTextBox1').on("keydown", function(e) {
if (e.keyCode !== 8) {
return false;
}
});
达到字数限制时,应使用此选项。 一旦字数减少,您应该
$('#MyTextBox1').off("keydown");
这是一个小提琴来演示: http : //jsfiddle.net/2b6agtt9/8/
它计算文本区域中的单词数,并通过粘贴和键入来删除多余的一项
$('#remainingWords').html("0");
var extraWord = parseInt(WordsUsed) - parseInt(WordsLimit);
var postBody = $('#MyTextBox1').val().split(' ');
console.log($('#MyTextBox1').val());
for(var i = WordsLimit; i < WordsUsed; i++){
postBody.pop();
}
$('#MyTextBox1').val(postBody.join(' '));
$('#ExtraWords').html("You have entered " + extraWord + " extra Words!!");
一个对您有用的插件
JQuery的
jQuery.fn.extend({
lengthLimit: function(limit,disabled,$label,multipleClassName) {
this.unbind("keyup.keyupTextLimits");
this.bind("keyup.keyupTextLimits",function() {
var allSelector=$("."+multipleClassName).add($(this));
var otherFieldsLength=0;
allSelector.not(this).each(function() {
otherFieldsLength+=this.value.length;
});
var val=$(this).val();
var len =val.length+otherFieldsLength;
if (len > limit) {
allSelector.each(function(){
$(this).val(val.substring(0, limit));
if(disabled) $(this).attr('readonly','readonly');
});
} else {
$label.text((limit-len)+" Words Remaining");
}
});
this.trigger("keyup.keyupTextLimits");
return this;
}
});
$("#MyTextBox1").lengthLimit(20,true,$("#remainingWords1"));
$(".diff").lengthLimit(20,true,$("#remainingWords2"),"diff");
$("#reLimit").click(function(){
$("#MyTextBox1").lengthLimit(10,true,$("#remainingWords1"));
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.