{"id":230207,"date":"2022-11-24T18:52:00","date_gmt":"2022-11-24T15:52:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230207"},"modified":"2022-11-09T20:35:48","modified_gmt":"2022-11-09T17:35:48","slug":"elements-dynamiques-elements-statiques-gestionnaires-devenements-et-leurs-complexites","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/elements-dynamiques-elements-statiques-gestionnaires-devenements-et-leurs-complexites\/","title":{"rendered":"\u00c9l\u00e9ments dynamiques, \u00e9l\u00e9ments statiques, gestionnaires d&rsquo;\u00e9v\u00e9nements et leurs complexit\u00e9s"},"content":{"rendered":"\n<p>Travailler avec des \u00e9l\u00e9ments empil\u00e9s sur une page, certains qui sont des ancres et d&rsquo;autres qui sont des \u00e9l\u00e9ments avec des gestionnaires d&rsquo;\u00e9v\u00e9nements peut parfois provoquer un comportement \u00e9trange.<\/p>\n<p>En fin de compte, tout cela a \u00e0 voir avec la propagation des \u00e9v\u00e9nements, mais si vous n&rsquo;avez pas eu \u00e0 g\u00e9rer cela (ou le bouillonnement d&rsquo;\u00e9v\u00e9nements ou quelque chose comme \u00e7a), cela peut \u00eatre un peu difficile.<\/p>\n<p>Et voici un exemple: Que se passe-t-il si vous avez une image envelopp\u00e9e dans une ancre. Que se passe-t-il lorsque vous placez un \u00e9l\u00e9ment dynamique via JavaScript apr\u00e8s le chargement de la page qui charge un autre \u00e9l\u00e9ment dynamique\u00a0? En plus de cela, vous souhaitez emp\u00eacher la page de rediriger lorsque l&rsquo;\u00e9l\u00e9ment dynamique est cliqu\u00e9 mais toujours directe lorsque l&rsquo;image est cliqu\u00e9e\u00a0?<\/p>\n<p>Cela peut sembler simple &#8211; et dans certains cas, c&rsquo;est le cas &#8211; mais si vous avez un \u00e9l\u00e9ment transparent recouvrant l&rsquo;int\u00e9gralit\u00e9 de l&rsquo;image originale, cela peut devenir un tout autre d\u00e9fi.<\/p>\n<p>C&rsquo;est l\u00e0 que la compr\u00e9hension des cibles d&rsquo;\u00e9v\u00e9nements entre en jeu. Mais avant d&rsquo;expliquer comment le r\u00e9soudre, je vais essayer de tout r\u00e9sumer en une explication plus simple et de sch\u00e9matiser comment il est rendu dans le DOM.<\/p>\n<h2>\u00c9l\u00e9ments dynamiques, \u00e9l\u00e9ments statiques et gestionnaires d&rsquo;\u00e9v\u00e9nements<\/h2>\n<p>Alors essayez d&rsquo;imaginer ceci\u00a0: vous avez\u2026<\/p>\n<ul>\n<li>Une page qui a une image et l&rsquo;image est envelopp\u00e9e dans une ancre qui vous m\u00e8nera, par exemple, \u00e0 une autre page.<\/li>\n<li>Lorsque la page se charge, deux \u00e9l\u00e9ments dynamiques sont cr\u00e9\u00e9s. Lorsque le premier est cliqu\u00e9, il devrait afficher le deuxi\u00e8me \u00e9l\u00e9ment dynamique.<\/li>\n<li>Lorsque la premi\u00e8re dynamique est cliqu\u00e9e, elle ne doit pas rediriger la page.<\/li>\n<li>Lorsque l&rsquo;on clique sur l&rsquo;image d&rsquo;origine, elle doit se comporter comme pr\u00e9vu.<\/li>\n<\/ul>\n<p>La partie la plus difficile est que les \u00e9l\u00e9ments dynamiques sont plac\u00e9s au-dessus de la combinaison existante d&rsquo;ancre et d&rsquo;image.<\/p>\n<h3>Un regard sur le DOM<\/h3>\n<p>Cela signifie que le DOM ressemblerait \u00e0 ceci\u00a0:<\/p>\n<p>Notez dans l&rsquo;image ci-dessus que l&rsquo; <strong>ancre<\/strong> d\u00e9clenche l&rsquo; <strong>image<\/strong> et que l&rsquo; <strong>\u00e9l\u00e9ment dynamique<\/strong> d\u00e9clenche la <strong>superposition dynamique<\/strong>.<\/p>\n<p>Alors, comment faire pour afficher le deuxi\u00e8me \u00e9l\u00e9ment dynamique lorsque le premier a cliqu\u00e9 sans quitter la page\u00a0? Vous pouvez le faire en examinant la cible de l&rsquo;\u00e9v\u00e9nement qui a \u00e9t\u00e9 d\u00e9clench\u00e9.<\/p>\n<h3>Le code de gestion des \u00e9v\u00e9nements<\/h3>\n<p>J&rsquo;utiliserai jQuery ci-dessous car la plupart de mes lecteurs travaillent avec WordPress et WordPress est livr\u00e9 avec jQuery, mais cela peut \u00e9galement \u00eatre g\u00e9r\u00e9 avec du JavaScript vanille (mais essayer de suivre cette voie est plus que ce que je suis pr\u00eat \u00e0 expliquer dans ce particulier Publier).<\/p>\n<p>Cela dit, voici l&rsquo;essentiel dont je vais vous expliquer ce qui se passe <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/c2d33cce48603de444d2a620927f32da#file-00-example-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">avec le code\u00a0:<\/a><\/strong><\/p>\n<pre><code>$('.acme-element').each(function(e) { \n  var $anchor = $(this).parents('a');\n  $(this).on('click', function(evt) {\n    if(e.target !== this) {\n      evt.preventDefault();\n    }\n    \/\/ Here, you may want to action to redirect to an original anchor.\n  });\n});<\/code><\/pre>\n<p>Tout d&rsquo;abord, je fais l&rsquo;hypoth\u00e8se qu&rsquo;il existe plusieurs \u00e9l\u00e9ments dynamiques, d&rsquo;o\u00f9 la raison de <a href=\"https:\/\/api.jquery.com\/jquery.each\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">chaque<\/a> it\u00e9rateur.<\/p>\n<p>Ensuite, il cr\u00e9e une r\u00e9f\u00e9rence \u00e0 l&rsquo; \u00e9l\u00e9ment d&rsquo; <strong>ancrage<\/strong> qui est un parent de l&rsquo;instance actuelle de l&rsquo;\u00e9l\u00e9ment dynamique (l&rsquo;utilisation de <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Statements\/var\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">var<\/a> ici est importante pour qu&rsquo;il se r\u00e9f\u00e8re toujours \u00e0 l&rsquo;\u00e9l\u00e9ment qui est le parent de l&rsquo;instance actuelle de l&rsquo;it\u00e9ration par rapport \u00e0 l&rsquo;\u00e9crasement d&rsquo;une instance pr\u00e9c\u00e9dente ).<\/p>\n<p>Lorsque l&rsquo;\u00e9l\u00e9ment est cliqu\u00e9, nous configurons un gestionnaire de <strong>clic<\/strong> afin que nous puissions jeter un \u0153il \u00e0 la cible de l&rsquo;\u00e9v\u00e9nement de l&rsquo;\u00e9v\u00e9nement click. C&rsquo;est l\u00e0 que \u00e7a devient un peu d\u00e9routant.<\/p>\n<p>Nous avons des variables <strong>e<\/strong> et <strong>evt<\/strong> qui font chacune r\u00e9f\u00e9rence au gestionnaire d&rsquo;\u00e9v\u00e9nements pour un \u00e9l\u00e9ment sp\u00e9cifique. Dans le code ci-dessus\u00a0:<\/p>\n<ul>\n<li><strong>e<\/strong> fait r\u00e9f\u00e9rence \u00e0 l&rsquo;\u00e9v\u00e9nement li\u00e9 \u00e0 notre \u00e9l\u00e9ment dynamique,<\/li>\n<li><strong>evt<\/strong> fait r\u00e9f\u00e9rence \u00e0 l&rsquo;\u00e9l\u00e9ment mais affectera \u00e9galement le processus de propagation des \u00e9v\u00e9nements, ce qui signifie qu&rsquo;il d\u00e9clenchera des \u00e9v\u00e9nements dans le reste du DOM.<\/li>\n<\/ul>\n<p>Et ainsi, dans notre conditionnel, nous \u00e9valuons la cible du premier gestionnaire d&rsquo;\u00e9v\u00e9nements pour nous assurer qu&rsquo;il ne correspond pas \u00e0 l&rsquo;\u00e9l\u00e9ment sp\u00e9cifique. \u00c0 partir de l\u00e0, comme vous pouvez le voir dans le commentaire du code, vous pouvez d\u00e9terminer comment vous voulez proc\u00e9der (comme peut-\u00eatre aller de l&rsquo;avant et le laisser naviguer ailleurs ou faire autre chose).<\/p>\n<p>En fin de compte, c&rsquo;est votre d\u00e9cision. Mais lorsque vous entrez dans une liaison d&rsquo;\u00e9l\u00e9ments dynamiques, d&rsquo;\u00e9l\u00e9ments statiques et de gestionnaires d&rsquo;\u00e9v\u00e9nements, cela peut rapidement devenir compliqu\u00e9.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lorsque vous entrez dans une liaison d&rsquo;\u00e9l\u00e9ments dynamiques, d&rsquo;\u00e9l\u00e9ments statiques et de gestionnaires d&rsquo;\u00e9v\u00e9nements, cela peut se compliquer rapidement.<\/p>\n","protected":false},"author":1,"featured_media":224006,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[893,717,728],"tags":[1167],"class_list":["post-230207","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-code-2","category-developpeur","category-javascript-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/230207","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=230207"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/230207\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/224006"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=230207"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=230207"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=230207"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}