First, Laurin Dodd of Computer products for Education mentioned that iPhone’s method of password masking (which masks ever character except the last one typed, and that’s only displayed for 2 seconds after the key is let up) was the most efficient.
Now, I wanted an easy way to be able to throw a character counter on a website. In fact, as many character counters as I need. Instead of write a jQuery plugin, I think it is easier to ID your fields and then specify a SPAN tag with the ID -chars; e.g. textarea #comments would have a span#comments-chars. The default value you put in the HTML is what the enforced maximum length of that control will be. It just seems more intuitive to have a <span id=”comments-chars”>200</span> and doing the appropriate checks, than doing $(“#comments”).charCounter(“#comments-chars”, 200).
Paste the function below into your JavaScript file, then call it to activate your character counters:
// Finds any elements where the ID ends in -chars, and then finds
// its corresponding element (same ID without the -chars), and sets it up
// to where the maximum length of the box is what HTML is in the -chars.
// by Derreck Dean www.derreckdean.com 2009 06 29
function setupCharCounters() {
$("[id$=-chars]").each(function() {
var charCounter = $(this);
var maximumChars = parseInt($(this).html());
var target = $("#" + $(this).attr("id").replace("-chars", ""));
target.attr("maxchars", maximumChars); // save this
target.keyup(function() {
var maxChars = $(this).attr("maxchars");
var value = $(this).attr("value");
var remain = maxChars - value.length;
if (remain < 0) {
remain = 0;
$(this).attr("value", value.substring(0, maxChars));
}
$("#" + $(this).attr("id") + "-chars").html(remain.toString());
});
});
}