¡buenas!
de acuerdo al experimento que realicé, opino que dicha medida puede resultar más molestoso de lo que se puede pensar. más o menos se me había ocurrido el mismo principio de @furoya, solo que empleando el evento keypress y keyup. en keypress determina si el booleano existe y evita la acción por defecto del evento. luego establece el boolean a true. en keyup reestablece el boolean a false. la idea es que al sostenerse la tecla, solamente se acepta el primer evento hasta que ocurre el evento keyup. entonces, ¿por qué resulta molestoso? específicamente le resultará molestoso a aquellas personas con habilidades para la mecanografía ‒ aunque no es necesario que lo posea para experimentar este resultado durante el uso común. no obstante, este detalle puede variar de persona en persona, en particular el problema viene cuando se presionan dos teclas al mismo tiempo sin antes levantar la primera tecla presionada. el resultado es que esa segunda tecla no toma efecto. no es algo que me estoy inventando, sino que acabo de descubrir que inconcientemente es como escribo.
Código:
// el script funciona en chrome y parcialmente en firefox;
document.down = false;
// para este ejemplo, el evento keydown no tiene ningun proposito importante
// es simplemente para rastrear el orden en que surge los eventos del teclado
document.onkeydown = function(evt){
console.log('down');
};
document.onkeyup = function(evt){
this.down = false;
console.log('up');
};
document.onkeypress = function(evt){
if(this.down){ evt.preventDefault(); }
this.down = true;
console.log('press');
};
no funciona muy bien en firefox porque ‒ a diferencia del resto de los navegadores ‒ firefox detecta todo tipo de tecla en los tres eventos. firefox requiere un algoritmo distinto, aún no se me ocurre alguno.
@isabelm, tu ejemplo tiene un fallo muy serio. ¿qué sucede si quiero escribir una letra dos veces? por ejemplo las dos "L" en la palabra "llama". en tu algoritmo estás comprobando cuál fue el último caracter introducido. si el anterior y el siguiente coincide, entonces detienes el evento.