{"id":230787,"date":"2022-12-08T17:29:00","date_gmt":"2022-12-08T14:29:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230787"},"modified":"2022-12-07T11:54:31","modified_gmt":"2022-12-07T08:54:31","slug":"le-pourquoi-et-le-comment-des-evenements-jquery-personnalises","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/le-pourquoi-et-le-comment-des-evenements-jquery-personnalises\/","title":{"rendered":"Le pourquoi et le comment des \u00e9v\u00e9nements jQuery personnalis\u00e9s"},"content":{"rendered":"\n<p>D\u00e8s la version 1.0, jQuery a fourni une fonction de <a href=\"https:\/\/api.jquery.com\/trigger\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">d\u00e9clenchement<\/a> qui nous permet de\u00a0:<\/p>\n<blockquote>\n<p>Ex\u00e9cute tous les gestionnaires et comportements attach\u00e9s aux \u00e9l\u00e9ments correspondants pour le type d&rsquo;\u00e9v\u00e9nement donn\u00e9.<\/p>\n<\/blockquote>\n<p>Mais ce n&rsquo;est qu&rsquo;\u00e0 partir de la version 1.3 que cette fonction particuli\u00e8re est devenue beaucoup plus utile, du moins en ce qui me concerne. Je dis cela parce que c&rsquo;est \u00e0 ce moment-l\u00e0 que nous avons acquis la possibilit\u00e9 de d\u00e9finir des \u00e9v\u00e9nements personnalis\u00e9s, puis de d\u00e9finir des gestionnaires pour eux.<\/p>\n<p>Quel est, cependant, un cas d&rsquo;utilisation probable dans lequel les \u00e9v\u00e9nements jQuery personnalis\u00e9s sont utiles dans le contexte de WordPress\u00a0? Du haut de votre t\u00eate, vous pourrez peut-\u00eatre en trouver beaucoup. Ou peut \u00eatre pas.<\/p>\n<p>Ce n&rsquo;est que r\u00e9cemment que je les utilise beaucoup plus que d&rsquo;habitude. J&rsquo;ai donc pens\u00e9 que je partagerais comment je les utilise si pour l&rsquo;instant autre chose que de vous montrer comment les connecter \u00e0 votre travail.<\/p>\n<h2>\u00c9v\u00e9nements jQuery personnalis\u00e9s<\/h2>\n<p>Si vous avez de l&rsquo;exp\u00e9rience avec JavaScript &#8211; vanille ou non &#8211; vous connaissez probablement les gestionnaires d&rsquo;\u00e9v\u00e9nements de base. Autrement dit, lorsque quelqu&rsquo;un clique sur un \u00e9l\u00e9ment, nous avons une fonction d\u00e9finie pour se d\u00e9clencher qui fait quelque chose.<\/p>\n<p>Les \u00e9v\u00e9nements jQuery personnalis\u00e9s ressemblent beaucoup \u00e0 cela, sauf que ce sont des \u00e9v\u00e9nements que nous d\u00e9finissons. Cela signifie que nous n&rsquo;avons pas \u00e0 compter sur le moment o\u00f9 quelqu&rsquo;un d\u00e9place sa souris sur un \u00e9l\u00e9ment ou lorsqu&rsquo;il clique sur un \u00e9l\u00e9ment.<\/p>\n<p>Au lieu de cela, nous pouvons d\u00e9clencher un \u00e9v\u00e9nement, puis configurer un gestionnaire pour r\u00e9pondre de mani\u00e8re appropri\u00e9e. Voici un exemple.<\/p>\n<h3>Pr\u00e9paration d&rsquo;un \u00e9v\u00e9nement personnalis\u00e9<\/h3>\n<p>Disons que vous travaillez sur un projet et qu&rsquo;il a une page d&rsquo;administration charg\u00e9e de r\u00e9cup\u00e9rer les donn\u00e9es d&rsquo;une API tierce. Le flux de contr\u00f4le ressemblerait \u00e0 ceci\u00a0:<\/p>\n<ol>\n<li>L&rsquo;utilisateur clique sur un bouton,<\/li>\n<li>Une requ\u00eate Ajax est initi\u00e9e et demande des informations au tiers,<\/li>\n<li>Pendant que la demande est en cours, les boutons \u00e0 l&rsquo;\u00e9cran doivent \u00eatre d\u00e9sactiv\u00e9s,<\/li>\n<li>Une fois la requ\u00eate termin\u00e9e, les boutons peuvent \u00eatre r\u00e9activ\u00e9s,<\/li>\n<li>En option, un message d&rsquo;\u00e9tat peut \u00eatre \u00e9crit \u00e0 l&rsquo;\u00e9cran.<\/li>\n<\/ol>\n<p>Pour que cela se produise, il s&rsquo;attend \u00e0 ce qu&rsquo;il y ait au moins un bouton (comme dans un \u00e9l\u00e9ment d&rsquo; <strong>entr\u00e9e) et un champ de texte facultatif ou une zone de<\/strong> <strong>texte<\/strong> dans laquelle le statut de la demande peut se produire.<\/p>\n<p>Une fois que l&rsquo;utilisateur clique sur l&rsquo;\u00e9v\u00e9nement, nous pouvons d\u00e9clencher un \u00e9v\u00e9nement personnalis\u00e9. Nous pouvons appeler cet \u00e9v\u00e9nement <strong>acme.ajax.processing<\/strong>. Ensuite, nous pouvons utiliser la fonction <a href=\"https:\/\/api.jquery.com\/jquery.ajax\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">done<\/a> fournie par jQuery pour g\u00e9rer tout ce que nous voulons nettoyer par la suite ou nous pouvons utiliser notre fonction personnalis\u00e9e s&rsquo;il y a aussi quelque chose que nous voulons g\u00e9rer \u00e0 la fin.<\/p>\n<p>Pour ces deux, nous allons regarder les deux. Nous aurons donc \u00e9galement un \u00e9v\u00e9nement appel\u00e9 <strong>acme.ajax.complete<\/strong>.<\/p>\n<p>Nous sommes donc concern\u00e9s par :<\/p>\n<ul>\n<li>cr\u00e9er un \u00e9v\u00e9nement personnalis\u00e9,<\/li>\n<li>le d\u00e9clenchant,<\/li>\n<li>la mise en place d&rsquo;un gestionnaire d&rsquo;\u00e9v\u00e9nements pour cela,<\/li>\n<li>terminer une fois la demande termin\u00e9e.<\/li>\n<\/ul>\n<p>Et c&rsquo;est ce que nous ferons.<\/p>\n<h3>D\u00e9finir un \u00e9v\u00e9nement personnalis\u00e9<\/h3>\n<p>Ainsi lorsqu&rsquo;un utilisateur clique sur un bouton, une requ\u00eate Ajax est en train d&rsquo;\u00eatre faite. En m\u00eame temps, cela va \u00e9galement d\u00e9clencher l&rsquo; \u00e9v\u00e9nement <strong>acme.ajax.processing<\/strong> qui aura son gestionnaire d&rsquo;\u00e9v\u00e9nements.<\/p>\n<p>Alors d&rsquo;abord, cr\u00e9ons la requ\u00eate Ajax. <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/61bd05c60b40d9f3ecd9eb81e5cb3f86#file-00-button-handler-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Pour cela<\/a><\/strong>, je vais supposer que le bouton responsable du d\u00e9clenchement de la requ\u00eate Ajax est simplement appel\u00e9 <strong>$button :<\/strong><\/p>\n<pre><code>$button.on('click', function(evt) {\n  evt.preventDefault();\n  $(document).trigger('acme.ajax.processing');\n\n  $.get(ajaxurl, {\n    \/\/ Your action and security measures here.\n  }, function(response) {\n    \/\/ Your response behavior here.\n  });\n});<\/code><\/pre>\n<p>Notez que la premi\u00e8re chose que nous voulons faire est de d\u00e9clencher l&rsquo;\u00e9v\u00e9nement de traitement, puis nous faisons la demande.<\/p>\n<h3>G\u00e9rer un \u00e9v\u00e9nement personnalis\u00e9<\/h3>\n<p>Ensuite, nous voulons nous assurer que nous avons un gestionnaire d&rsquo;\u00e9v\u00e9nements configur\u00e9 pour d\u00e9sactiver le bouton pendant que la demande est en cours.<\/p>\n<p>C&rsquo;est facile \u00e0 faire et pour rester simple, et je vais <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/61bd05c60b40d9f3ecd9eb81e5cb3f86#file-01-disable-button-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">d\u00e9sactiver le bouton\u00a0:<\/a><\/strong><\/p>\n<pre><code>$(document).on('acme.ajax.processing', function() {\n  $button.attr('disabled', 'disabled');\n});<\/code><\/pre>\n<p>Facile, non ?<\/p>\n<h3>G\u00e9rer un autre \u00e9v\u00e9nement personnalis\u00e9<\/h3>\n<p>Ensuite, nous devons g\u00e9rer la situation lorsque la requ\u00eate Ajax est termin\u00e9e. Nous devons donc nous assurer de d\u00e9clencher l&rsquo;\u00e9v\u00e9nement, puis nous devons g\u00e9rer l&rsquo;\u00e9v\u00e9nement.<\/p>\n<p>Le d\u00e9clenchement de l&rsquo;\u00e9v\u00e9nement <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/61bd05c60b40d9f3ecd9eb81e5cb3f86#file-02-request-complete-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">est simple\u00a0:<\/a><\/strong><\/p>\n<pre><code>$button.on('click', function(evt) {\n  evt.preventDefault();\n  $(document).trigger('acme.ajax.processing');\n\n  $.get(ajaxurl, {\n    \/\/ Your action and security measures here.\n  }, function(response) {\n    \/\/ Your response behavior here.\n  })\n  .done(function() {\n     $(document).trigger('acme.ajax.complete');\n  });\n});<\/code><\/pre>\n<p>Et la gestion de l&rsquo;\u00e9v\u00e9nement peut \u00eatre remplac\u00e9e par le code <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/61bd05c60b40d9f3ecd9eb81e5cb3f86#file-03-enable-button-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">que nous avons d\u00e9j\u00e0\u00a0:<\/a><\/strong><\/p>\n<pre><code>$(document)\n  .on('acme.ajax.processing', function() {\n    $button.attr('disabled', 'disabled');\n  })\n  .on('acme.ajax.complete', function() {\n    $button.removeAttr('disabled');\n  });<\/code><\/pre>\n<p>Il peut \u00eatre cha\u00een\u00e9 car il se produit sur l&rsquo; objet <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Document\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">document<\/a> &#8211; pas un \u00e9l\u00e9ment s\u00e9par\u00e9.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162324-61e73b9885ab3.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162324-61e73b9885ab3.png\" alt=\"Le pourquoi et le comment des \u00e9v\u00e9nements jQuery personnalis\u00e9s\" ><\/a><\/p>\n<p>\u00c0 cette fin, il est donc beaucoup plus facile \u00e0 manipuler.<\/p>\n<h2>Juste un exemple<\/h2>\n<p>Bien s\u00fbr, ce n&rsquo;est qu&rsquo;un exemple de la fa\u00e7on de g\u00e9rer les \u00e9v\u00e9nements jQuery personnalis\u00e9s.<\/p>\n<p>Il existe de nombreuses autres fa\u00e7ons de le faire, et vous pouvez faire des choses assez compliqu\u00e9es avec; cependant, cela devrait fournir suffisamment d&rsquo;informations pour ce dont vous avez besoin sur la fa\u00e7on de travailler avec des \u00e9v\u00e9nements personnalis\u00e9s \u00e0 un niveau fondamental.<\/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>Quel est, cependant, un cas d&rsquo;utilisation probable dans lequel les \u00e9v\u00e9nements jQuery personnalis\u00e9s sont utiles dans le contexte de WordPress\u00a0? Et comment pourrions-nous r\u00e9ellement les utiliser dans notre travail quotidien\u00a0?<\/p>\n","protected":false},"author":1,"featured_media":236464,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[893,717,832,728],"tags":[1167],"class_list":["post-230787","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-code-2","category-developpeur","category-guide-pour-les-debutants","category-javascript-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/230787","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=230787"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/230787\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/236464"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=230787"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=230787"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=230787"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}