Ver Mensaje Individual
  #7 (permalink)  
Antiguo 24/05/2012, 01:51
Avatar de emprear
emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 5 meses
Puntos: 1567
Respuesta: Restringir cantidad de carácteres de tecla presionada de forma sostenida

Cita:
Iniciado por furoya Ver Mensaje
(Noo me deejan doooormiir!)
Apagá la PC....
Ahora en serio, si te interesa, me sobran un par de pantuflas de corderito, de esas que ya no se hacen, si te sirven, chiflá que te las hago llegar...

En otro orden de cosas, anteayer estuve viendo este post, cuando aún no había respuestas, después de algún par de esperimentos, (no merecen siquiera llamarse "experimentos"), y viendo que todos, tarde o temprano, hacían agua... decidí no postear, pero como veo que, los aventureros/as de siempre del Js, arrimaron sus devaneos, aquí va el mio...

Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  2.    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  5. <title>Teclas Repetidas</title>
  6. <script type="text/javascript">
  7. //<![CDATA[
  8. var texto = "";
  9. var tvacio = "";
  10. var i= 0;
  11. var e;
  12.  
  13. function capturarTecla(e) {
  14. e = (e) ? e : ((event) ? event : null);
  15. var version = (e.target) ? e.target : ((e.srcElement)?e.srcElement : null );
  16. var teclaNum = String.fromCharCode(e.keyCode);
  17. var tArea = document.getElementById('contenido');
  18. texto += teclaNum;
  19. var re = new RegExp(teclaNum,"gi");
  20.  
  21. if(i >2){
  22. alert('Teclas repetidas');
  23. //document.getElementById('foco').focus(); // variante
  24. var re2 = new RegExp(texto,"i");
  25. var re3 = tArea.value.replace(re2,'');
  26. tArea.value = re3;
  27. i = 0;
  28. texto=tvacio;
  29. }
  30. i++;
  31. }
  32.  
  33. function resetear(){
  34. i = 0;
  35. texto=tvacio;
  36. var teclaNum = "";
  37. }
  38. //]]>
  39. </head>
  40. <div>
  41. <textarea rows="8" cols="30" id="contenido" onkeydown="capturarTecla(event);" onkeyup="resetear();"></textarea>
  42.  <input type="text" id="foco" style="width: 1px; height: 1px; border: none; color: transparent; background-color: transparent;" /></div>
  43. </body>
  44. </html>

Observaciones:
la detección de caracteres repetidos y consecutivos (mas de 2 en el ejemplo) se produce en todos los navegadores...
Si quito el alert, el reemplazo de la secuencia repetida no se produce.
En IE el reemplazo es completamente irregular en su comportamiento...
En Firefox, si deseamos borrar texto con backspace, no detecta la repetición pero tras mantener la tecla apretada por 3 caracteres, me manda a la página previa del navegador, cosa que no hacen IE ni Chrome.
La variante de quitar el alert y al detectarse la repetición mandar el foco a un inpput invisible, es interesante....
Y no sigo porque carece de sentido, con que el usuario en lugar de mantener la tecla apretada, se dedique a apretar/soltar/apretar/soltar, el usuario va a burlar cualquier obstáculo y va a poooooooooooooooooooooooooder escriiiiiiiiiiiiiiiiiiiiiiibir lo queeeeeeeeee se le ocuuuuuuuurra.

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.