3 votes

Le délégué jQuery entre en conflit avec un autre délégué dans IE

Il semble qu'avec IE, certains délégués peuvent d'une manière ou d'une autre empêcher un autre délégué de fonctionner.

Voici un cas possible :

   $(function() {
    $('#main')
    .delegate('div', 'click', function() {
     alert('sur div !');
    })
    .delegate('[name=first]', 'change', function() {
     alert('premier !');
    })
    .delegate('[name=second]', 'change', function() {
     alert('deuxième !');
    })
    ;
   });

   Test

Dans ce cas particulier, le gestionnaire pour la case à cocher ne se déclenchera pas.

Comme d'habitude, le problème ne se manifeste pas dans les autres navigateurs.

Changer l'ordre des appels peut résoudre un problème, mais au risque d'en causer un autre. Notez que le délégué fonctionne sur des éléments mutuellement exclusifs, donc l'ordre ne devrait pas être pertinent.

Qu'est-ce qui cause cela?

0voto

Jesse Hallett Points 354

Je ne peux pas offrir d'explication; mais j'ai rencontré un comportement similaire dans IE8. Curieusement, dans mon cas, tout fonctionnait bien si je réarrangeais les liaisons de sorte que la liaison de délégué sur l'une de mes cases à cocher vienne avant les liaisons de délégués sur les autres éléments du formulaire. Un gestionnaire de clic délégué sur un lien avant le gestionnaire de case à cocher ne semblait pas causer de problèmes.

Dans mon cas, j'avais un gestionnaire de clic sur une case à cocher, deux gestionnaires de changement sur des listes déroulantes, deux gestionnaires de clic sur des boutons radio, un autre gestionnaire de clic sur une autre classe de cases à cocher, et plusieurs gestionnaires de clic sur des liens.

Il y a beaucoup de variables à prendre en compte et il est difficile de toutes les prendre en compte ici. Par exemple, le sélecteur délégué pour la case à cocher qui a posé problème pour moi était un sélecteur d'identifiant tandis que le sélecteur pour les cases à cocher inoffensives était une classe.

0voto

RichN Points 2615

Il semble que le problème a été résolu dans la dernière version de jQuery ou d'Internet Explorer (au moment de la rédaction, 1.5 et 9, respectivement).

0voto

Jason Points 880

J'ai également rencontré ce problème. Pour une raison quelconque, inverser l'ordre d'enregistrement des événements l'a corrigé pour moi. J'aimerais cependant une explication.

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