Si se puede hacer lo que tu quieres. Depende del evento que utilices para limitar el numero de caracteres.
Si utilizas
onkeypress, el caracter ya se habra impreso y entonces tendrias que borrar el caracter que se escribio (si ya se llego al limite).
Si utilizas el evento
onkeydown, este se ejecuta ANTES de que se imprima el caracter. Tendrias que revisar si ya se llego al limite y si es asi, entonces regresar un
false al evento (o hacer que el evento no se propague con stopPropagation() o cancelBubble() ). De lo contrario regresa un
true para que el evento continue.
Un inconveniente de utilizar
onkeydown es que al presionar cualquier tecla (incluso suprimir, retroceso, control, alt, etc) tambien se ejecuta el evento. Y si al revisar si el limite de caracteres ya se rebaso, entonces detendrias el evento incluso si presionaras suprimir para borrar algun caracter.
Trate de hacer lo que quieres como ejercicio pero me tuve que ocupar en otras cosas. Te dejo el codigo que escribi aunque creo que todavia no funciona al 100%
Código HTML:
Ver originalvar maximo = 5;
function presionar(e) {
var t = document.getElementById("texto").value.length;
document.getElementById("total").innerHTML = t;
var re = /[\w\s_]/g;
if ( !re.test(String.fromCharCode(e.keyCode)) )
return true;
if ( t < maximo )
return true;
else
return false;
}
<body onload="document.getElementById('texto').focus()"> <textarea id="texto" onkeydown="return presionar(event)" cols="50" rows="5"></textarea> <input type="button" value="Limpiar" onclick="document.getElementById('texto').value=''" />