2010-01-08 5 views
5

Je lie deux gestionnaires d'événements à un champ de saisie sur 'keydown'. Si vous avez appuyé sur la touche Entrée, le premier gestionnaire d'événements doit arrêter la propagation de l'événement afin qu'il ne touche pas le deuxième gestionnaire d'événements. Je le fais comme ça:jquery firefox stopPropagation()

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

maintenant cela n'arrête pas la propagation de l'événement soit dans IE ou Firefox. Il frappe le premier gestionnaire d'événements, puis frappe également le deuxième gestionnaire d'événements. Cependant, dans le deuxième gestionnaire d'événements, je peux effectivement vérifier si (e.cancelBubble) dans le cas d'IE. Existe-t-il un moyen de vérifier la même chose avec Firefox?

Répondre

13

Il suffit de retirer votre test pour IE et utiliser ceci:

event.stopImmediatePropagation(); 

qui gardera d'autres événements de tirer dans les deux navigateurs.

event.stopPropagation() empêchera les événements de bouillonner, mais n'empêchera pas les autres gestionnaires d'événements du même objet de se déclencher.

Pour répondre à votre autre question, si vous venez d'utiliser event.stopPropagation(), vous pouvez vérifier event.isPropagationStopped() dans le deuxième gestionnaire.

Suggestion: en règle générale, jQuery résume complètement tous les comportements des navigateurs pour fournir une interface unique à la fonctionnalité. Si vous vous trouvez en cours d'exécution if(jQuery.browser.msie) avant d'exécuter une fonction jQuery, il existe probablement une meilleure façon de l'exécuter qui fonctionnera à travers le navigateur. Et, lorsque vous avez besoin de tester, vous devez utiliser jQuery.support pour tester la fonctionnalité et non le reniflage spécifique du navigateur.

+2

wow man, ça a marché comme un charme !! Je n'ai même pas eu besoin d'utiliser isPropagationStopped(), car stopImmediatePropagation() fonctionne vraiment !! Merci beaucoup. – Riz

+0

C'était vraiment utile. – Nick