2012-03-13 24 views
8

Hola a todos Acabo de tomar jQueryLa tecla de parada no se repite en espera. (JQuery)

Así que mi pregunta es que quiero dejar una llave de repetir cuando se mantiene presionado

Ejemplo: Editar (i quiero que pare .. por lo que 1 caracteres por pulsación de tecla/keydown)

pulsación de tecla: un elemento de retención

: aaaaaaaaaaaaaaaaaaaaaaaaaaaaa

Mi código es:

<input type='text'> 

var stop= false; 
var time =null; 
$(':text').keypress(function(e) { 
if(stop === true){e.preventDefault();} 
    if (time !== null) { 
     lastkey = time; 
    } 
    time = new Date().getTime(); 
    var between = time - lastkey; 
    if (between <= 70) { 
     stop = true; 
    } 
}); 
$(':text').keyup(function(){stop = false;}); 

¿Voy por esto de la manera incorrecta?

+1

duplicado posible de [evento keydown evitar que JavaScript se manejan varias veces mientras se mantiene oprimida] (http://stackoverflow.com/questions/6087959/prevent-javascript -keydown-event-from-being-handled-multiple-times-while-held-do) – Isti115

Respuesta

4

Prueba esto: http://jsfiddle.net/maniator/yFA8c/

Sólo se permitirá una carta por cada 2 segundos.

Código:

var mult = false, 
    prev = 0; 

$('.mult').keydown(function(e) { 
    if (!mult) { 
     mult = true; 
     prev = e.which; 
     setTimeout(function() { 
      mult = false; 
     }, 2000) 
    } 
    else if (prev != e.which) { 
     mult = false; 
    } 
    else { 
     return false; 
    } 
})​;​ 
+0

¿Por qué no utilizar .keyup() en su lugar? Por supuesto, solo escribirías cuando lo liberases, pero dudo que la distinción sea demasiado importante para la mayoría de las personas que tipean a velocidades normales. –

+0

en lugar de evitar durante "x" segundos, simplemente deshabilite el evento de tecla si se presionó la misma tecla antes, como lo hice –

+0

@RafaelVerger que ya está en mi código ... – Neal

8

Utilice el enlace .keyup() en lugar de .keypress().

+0

si solo se utiliza el evento de teclado, no puede evitar las acciones predeterminadas para los eventos de pulsación de teclado y tecla –

+0

¡Brillante! Utilizo la tecla para las teclas de flecha del cursor, pero la tecla para todo lo demás. –

2

En lugar de presionar teclas, debe usar los eventos de teclado y tecla.

Por lo tanto, aquí hay una solución:

window.keypressed = {}; 
$('#element').keydown(function(e){ 
    if (window.keypressed[e.which]) { 
    e.preventDefault(); 
    } else { 
    window.keypressed[e.which] = true; 
}).keyup(function(e){ 
    window.keypressed[e.which] = false; 
}); 
+0

@ user1267070 compruebe este código ... evitará que se imprima cualquier clave más de una vez en un campo de texto –

+1

Bien hecho, simple y limpio. Utilicé var charCode = (typeof e.which === "number")? e.which: e.keyCode; luego usé charCode en lugar de e.which. – DeadlyChambers

+0

Bien hecho @DeadlyChambers, pero cuando usa jQuery 'e.which' es el código del teclado ya procesado (en una forma de navegador cruzado) –

Cuestiones relacionadas