2009-11-10 12 views
13

En mi sitio he registrado un controlador de eventos de pulsación de tecla para todo el documento.Cómo deshabilitar el evento de presionar JQuery para solo un elemento?

$(document).keypress(myhandler); 

Y manejo la tecla 'espacio' para desplazar una lista.

El problema es que hay un elemento <input type='text' />, y no quiero pulsación de tecla 'espacio' para desplazarse por la lista cuando se introduce en la entrada.

No pude encontrar ninguna información en el objeto "evento" pasado por JQuery al controlador, para identificar dónde está el origen del evento.

Respuesta

18

Como alternativa, puede adjuntar otro controlador de eventos para el campo de entrada, y en este manejador de detener la propagación del evento:

jQuery('#input-field-id').bind('keypress', function(e) { 
    e.stopPropagation(); 
}); 

De esta manera, puede dejar el controlador de eventos global tal como está. Podría estar más limpio.

+0

Definitivamente más limpio. – HRJ

+2

En lugar de 'e.stopPropagation();' use 'e.preventDefault();' –

3

está buscando event.target.id, que será la identificación del elemento sobre el que se activó el evento. Así que dentro de myhandler que se necesita algo como lo siguiente

function myhandler(e) { 
    if (e.target.id !== 'id of input') { 
     /* rest of event handler */ 
    } 
} 
+0

¡Eso funciona! ¡Gracias! – HRJ

1

Consulte la documentación sobre quirksmode event order, y especialmente sobre cómo desactivar los eventos, que es específico del navegador. Cita:

Para una experiencia completa multi-navegador no

function doSomething(e) 
{ 
    if (!e) var e = window.event; 
    e.cancelBubble = true; 
    if (e.stopPropagation) e.stopPropagation(); 
} 
Cuestiones relacionadas