我正在尝试使用我在网上找到的代码片段来实现charcount。它适用于单个文本区域。我有多个具有不同计数限制的文本区域。以下是适用于单个表单的代码。
Javascript:
function countChar(val,count,focus){
var len = val.value.length;
var lim=count;
var focussed=focus;
if (len >= lim) {
$('#charNum').text(lim - len);
$('#charNum').addClass('exceeded');
/* val.value = val.value.substring(0, lim);*/
}else {
if(focussed===0){
$('#charNum').html('<a> </a>');
}
else {
$('#charNum').text(lim - len);
$('#charNum').removeClass('exceeded');
}
}
};
HTML:
<div id='charNum' class='counter'> </div>
<textarea id='description' name='description' onkeyup=\"countChar(this,200,1)\" onblur=\"countChar(this,200,0)\" rows='10' cols='20'></textarea>
如果我有两个文本区域,如何修改此代码才能工作?我知道如何在脚本中获取div的id,但我不知道如何正确更新counter div,比如#charNum1和#charNum2。欣赏一些提示。感谢
编辑: 我在想,如果有帮助的话,我可以将计数器div命名为“Charnum + divName”
答案 0 :(得分:2)
如果使用jQuery附加事件处理程序,则可以在处理程序中使用this
来引用触发事件的任何元素,从而避免在函数内部对元素ID进行硬编码。
我建议添加一个允许max chars的属性并删除内联事件处理程序:
<div id='charNum' class='counter'> </div>
<textarea id='description' name='description' data-maxChars="200" rows='10' cols='20'></textarea>
<div id='charNum2' class='counter'> </div>
<textarea id='otherfield' name='otherfield' data-maxChars="400" rows='10' cols='20'></textarea>
然后:
$(document).ready(function() {
$("textarea[data-maxChars]").on("keyup blur", function(e) {
var $this = $(this),
$counter = $this.prev(),
len = $this.val().length,
maxChars = +$this.attr("data-maxChars");
$counter.text(maxChars - len).toggleClass("exceeded", len > maxChars);
});
});
答案 1 :(得分:0)
如果每个textarea都有自己的div,你可以在countChar函数中添加一个额外的参数,这个函数就是div的名字。所以你有类似的东西:
function countChar(val,count,focus, charCountDiv)
然后,jQuery不是在函数中对其进行硬编码,而是:
$(charCountDiv)
那应该做我认为你想做的事情。