2010-01-08 10 views
5

Estoy vinculando dos manejadores de eventos a un campo de entrada en 'keydown'. Si se ha presionado la tecla Intro, el primer controlador de eventos debe detener la propagación del evento para que no golpee al segundo controlador de eventos. Lo estoy haciendo así:jquery firefox stopPropagation()

if (jQuery.browser.msie) { 
        event.cancelBubble = true; 
       } else { 
        event.stopPropagation(); 
       } 

ahora esto solo no detiene la propagación del evento en IE o Firefox. Golpea al primer controlador de eventos y luego golpea también al segundo controlador de eventos. Sin embargo, en el segundo controlador de eventos, realmente puedo verificar si (e.cancelBubble) en el caso de IE. ¿Hay alguna manera de comprobar lo mismo con Firefox?

Respuesta

13

Basta con retirar su prueba para IE y utilizar esta:

event.stopImmediatePropagation(); 

que mantendrá otros eventos de la calcinación en ambos navegadores.

event.stopPropagation() evitará que los eventos se propaguen, pero no evitará que otros controladores de eventos disparen al mismo objeto.

Para responder a su otra pregunta, si acaba de utilizar event.stopPropagation() puede marcar event.isPropagationStopped() en el segundo controlador.

Sugerencia: como regla general jQuery abstrae completamente el comportamiento de todos los navegadores para proporcionar una interfaz única a la funcionalidad. Si se encuentra ejecutando if(jQuery.browser.msie) antes de ejecutar una función jQuery, probablemente exista una forma mejor de ejecutarlo que funcione en el navegador cruzado. Y, cuando necesite probar, debe usar jQuery.support para probar la funcionalidad, no el rastreo específico del navegador.

+2

wow man, eso funcionó como un encanto !! ¡Ni siquiera tuve que usar isPropagationStopped(), ya que stopImmediatePropagation() funciona realmente! Muchas gracias. – Riz

+0

Esto fue realmente útil. – Nick

Cuestiones relacionadas