2009-09-10 34 views
27

Cómo detener el evento de pulsación de tecla en el ajuste de teclado.Detener evento de pulsación de tecla

Tengo un manejador de teclas en el que necesito detener el evento de pulsación de teclas.

Actualmente tengo un formulario y un cuadro de texto en él.

cuando el usuario presiona la tecla "enter", keydown disparo el evento y tengo el controlador.

el envío de formulario se activará al presionar las teclas, así que tengo que detener el evento de pulsación de teclas en mi manejador de teclas.

Respuesta

33
function onKeyDown(event) { 
    event.preventDefault(); 
} 

http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-Event-preventDefault

o

function onsubmit(event) { 
    return false; 
} 

retorno falsa para detener la propagación de eventos

+1

event.preventDefault(); no funciona en la opera – Santhosh

+0

var suppressEvent = false; function onKeyDown (evento) { suppressEvent = true; event.preventDefault(); } function onKeyPress (evento) { if (suppressEvent) event.preventDefault(); } – andho

+0

Muchas gracias @john. Esto me ayudó con un problema que tenía cuando mi controlador de eventos personalizado hacía que la tecla Intro se moviera a la celda de abajo en una tabla html _Y_ agregaba una nueva línea innecesaria en esa nueva celda. Solo necesitaba cancelar el evento predeterminado de la tecla Intro. –

0

escritura,

<script type="text/javascript"> 
     function keyDn(obj) 
     { 
     if(window["event"]["keyCode"]==48) // key 0 will disabled keyPress event 
     { 
      obj["onkeypress"]=null; 
      } 
     } 
     function keyPs(obj) 
     { 
     alert("Keypress"); 
     } 

    </script> 

    <form id="form1" runat="server"> 
    <div> 
    <input type="text" onkeydown="keyDn(this)" onkeypress="keyPs(this)" /> 
    </div> 
    </form> 

en keydown manejador.

1

Pruebe event.cancelBubble = true en el controlador de eventos.

0

Pude obtener el evento.preventDefault(); para trabajar en Safari y Firefox, pero no en IE7 o IE8.

Si solo desea deshabilitar la tecla Intro, asegúrese de que también está comprobando el valor de la clave (13 para Intro) y solo establezca event.preventDefault() para esa clave.

¿Alguien puede encontrar una respuesta para IE7/8 u Opera?

+0

Sé que este es un hilo muy antiguo, pero como su pregunta aún no ha sido respondida, lo haré.De hecho, recientemente encontré una solución de trabajo para el problema que ha especificado: Hace que su formulario devuelva falso al momento de la publicación y oculta y deshabilita su botón de envío. A continuación, crea un segundo botón (que no es del tipo enviar) que de hecho eliminará la propiedad return false del evento onsubmit y también eliminará la desactivación del botón. Después de eso, usa este botón para simular el evento de clic en el botón de envío real. Puede encontrar un ejemplo de trabajo aquí: http://jsfiddle.net/rsauxil/qyf8L/6/. – JohannesB

3

En opera, debe utilizar el evento keypress para evitar las acciones predeterminadas para eventos de teclado. keydown funciona para evitar la acción predeterminada en todos los navegadores pero no en la opera.

Consulte this long list of inconsistencies en el manejo del teclado en los navegadores.

0

Aquí se detuvo la propagación de eventos para un máximo de teclas/dn/izquierda/derecha:

$(document).on("keydown", function(e) { 
     if(e.keyCode >= 37 && e.keyCode <= 40) { 
      e.stopImmediatePropagation(); 
      return; 
     } 
    }); 

también probé e.preventDefault o event.cancelBubble = true de las respuestas anteriores, pero no tuvo impacto.

Cuestiones relacionadas