302 votes

Comment arrêter la propagation d'événement avec l'attribut inline onclick?

Considérez ce qui suit :

Comment peux je faire en sorte que lorsque l’utilisateur clique sur la durée, il ne déclenche pas l’événement onclick de la div ?

259voto

James Points 56229

event.stopPropagation()

EDIT : Pour IE :``

209voto

Gareth Points 42402

Il y a deux façons d'obtenir de l'objet d'événement à partir de l'intérieur d'une fonction:

  1. Le premier argument, dans un navigateur compatible W3C (Chrome, Firefox, Safari, IE9+)
  2. De la fenêtre.objet événement dans Internet Explorer (<=8)

Si vous avez besoin de soutenir les anciens navigateurs qui ne respectent pas les recommandations du W3C, généralement à l'intérieur d'une fonction, vous utilisez quelque chose comme ce qui suit:

function(e) {
  var event = e || window.event;
  [...];
}

ce qui permettrait de vérifier d'abord l'un, puis l'autre et de les stocker selon ce qui a été trouvé à l'intérieur de l'événement variable. Cependant, dans une ligne de gestionnaire d'événement il n'y a pas un e objet à utiliser. Dans ce cas, vous devez prendre avantage de l' arguments collection qui est toujours disponible et se réfère à l'ensemble des arguments passés à une fonction:

onclick="var event = arguments[0] || window.event; [...]"

Cependant, en général, vous devriez éviter inline gestionnaires d'événement si vous avez besoin de rien de compliqué, comme l'arrêt de la propagation. L'écriture de vos gestionnaires d'événements séparément et de les attacher à des éléments est une bien meilleure idée sur le moyen et long terme, à la fois pour des raisons de lisibilité et de facilité de maintenance.

80voto

Robert C. Barth Points 9788

N’oubliez pas que window.event n’est pas pris en charge dans FireFox, et par conséquent il doit être quelque chose dans le sens de :

Sinon, vous pouvez utiliser la norme W3C pour FireFox :

Si vous souhaitez obtenir de fantaisie, vous pouvez faire ceci :

45voto

SoftwareARM Points 685

Utilisez cette fonction, il permettra de tester l’existence de la méthode correcte.

19voto

MSC Points 79

J’ai eu le même problème - la boîte d’erreur js dans IE - cela fonctionne très bien dans tous les navigateurs que je vois (event.cancelBubble=true fait le travail dans IE)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X