我需要能够在键入文本时对textarea中的字符进行计数,除了被{}包围的任何内容。我需要打印文本区域下方的计数。我在JavaScript中看到了一些计数器,但我不确定如何从中排除{封闭文本}。我是否点击了?
<textarea id="myInput"></textarea>
Counter: <span id="charCount"></span>
感谢。
答案 0 :(得分:7)
你走了:
$('#myInput').keyup(function() {
$('#charCount').text( this.value.replace(/{.*}/g, '').length );
});
现场演示: http://jsfiddle.net/simevidas/8R9DH/
我使用的正则表达式不是最好的选择。使用@Matt或@Pointy提供的正则表达式文字。
这里:
var input = $('#myInput'),
count = $('#charCount'),
limit = 10;
input.keyup(function() {
var n = this.value.replace(/{.*?}/g, '').length;
if ( n > limit ) {
this.value = this.value.substr(0, this.value.length + limit - n);
n = 10;
}
count.text( n );
}).triggerHandler('keyup');
答案 1 :(得分:4)
像这样的东西。我使用了keyup
而不是change
,因为change
事件只会在失去焦点时触发textarea。
var $input = $('#myInput'),
$output = $('#charCount'),
re_strip = /\{.*?\}/g;
$input.keyup(function ()
{
var val = $(this).val();
val = val.replace(re_strip, '');
$output.text(val.length);
});
答案 2 :(得分:3)
你可以试试这个:
$('#myInput').change(function() {
$('#charCount').text(this.value.replace(/{[^}]*}/, '').length);
});
现在要了解一件重要的事情:通常,您会计算textarea中的字符以防止数据库字段溢出。因此,让用户放弃所有可能的角色很重要,但是你不想在没有警告的情况下切断任何东西。问题是IE和其他浏览器使用嵌入式换行符做了不同的事情。我不记得究竟是哪一个(我会弄清楚并更新答案),但是一个/一些浏览器包括CR-LF对作为行分隔符,而一个/一些不包括。
编辑 - 好的我还记得更多 - 问题是,当你获得<textarea>
“值”时,返回JavaScript的字符串之间存在差异(在某些浏览器中)属性和浏览器实际发回主机的字符串。 (是的。)因此,当你检查长度时,必须考虑这种奇怪的行为。这是我使用的代码:
var
adjust = ta.val().match(/[^\r]\n/g),
alen = adjust ? adjust.length : 0,
actual = ta.val().length + alen,
ratio = Math.max(actual/ml);
变量“ta”有一个<textarea>
DOM元素。首先,变量“adjust”设置为值中找到的换行符数,不带前一个回车符。如果找到了一些,则从内容的普通长度中减去该总数,得到“actual”,这应该是浏览器在发布表单时发送回服务器的实际字符数。
答案 3 :(得分:0)
类似的东西:
$("#myInput").change(function(){
n = this.val().length;
$('#charCount').text = n;
});