{"id":230527,"date":"2022-11-24T19:04:00","date_gmt":"2022-11-24T16:04:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230527"},"modified":"2022-11-09T22:48:17","modified_gmt":"2022-11-09T19:48:17","slug":"elementi-dinamici-elementi-statici-gestori-di-eventi-e-loro-complessita","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/elementi-dinamici-elementi-statici-gestori-di-eventi-e-loro-complessita\/","title":{"rendered":"Elementi dinamici, elementi statici, gestori di eventi e loro complessit\u00e0"},"content":{"rendered":"\n<p>Lavorare con elementi impilati su una pagina, alcuni che sono ancoraggi e altri che sono elementi con gestori di eventi a volte pu\u00f2 causare comportamenti strani.<\/p>\n<p>In definitiva, ha tutto a che fare con la propagazione degli eventi, ma se non hai avuto a che fare con quello (o con il bubbling di eventi o qualcosa del genere), pu\u00f2 essere un po&#8217; una sfida.<\/p>\n<p>Ed ecco un esempio: cosa succede se hai un&#8217;immagine che \u00e8 avvolta in un&#8217;ancora. Cosa succede quando un elemento dinamico posizionato tramite JavaScript dopo il caricamento della pagina carica un altro elemento dinamico? Inoltre, si desidera impedire il reindirizzamento della pagina quando si fa clic sull&#8217;elemento dinamico ma si desidera comunque effettuare un reindirizzamento diretto quando si fa clic sull&#8217;immagine?<\/p>\n<p>Potrebbe sembrare semplice \u2013 e in alcuni casi lo \u00e8 \u2013 ma se hai un elemento trasparente che si sovrappone all&#8217;intera immagine originale pu\u00f2 diventare un&#8217;altra sfida.<\/p>\n<p>\u00c8 qui che entra in gioco la comprensione degli obiettivi degli eventi. Ma prima di entrare nel modo in cui risolverlo, cercher\u00f2 di distillare tutto in una spiegazione pi\u00f9 semplice e di illustrare come viene visualizzato nel DOM.<\/p>\n<h2>Elementi dinamici, elementi statici e gestori di eventi<\/h2>\n<p>Quindi prova a immaginare questo: hai&#8230;<\/p>\n<ul>\n<li>Una pagina che ha un&#8217;immagine e l&#8217;immagine \u00e8 avvolta in un&#8217;ancora che ti porter\u00e0, ad esempio, a un&#8217;altra pagina.<\/li>\n<li>Quando la pagina viene caricata, vengono creati due elementi dinamici. Quando si fa clic sul primo, dovrebbe visualizzare il secondo elemento dinamico.<\/li>\n<li>Quando si fa clic sulla prima dinamica, non dovrebbe reindirizzare la pagina.<\/li>\n<li>Quando si fa clic sull&#8217;immagine originale, dovrebbe comportarsi come previsto.<\/li>\n<\/ul>\n<p>La parte difficile di questo \u00e8 che gli elementi dinamici sono posizionati sopra l&#8217;ancora esistente e la combinazione di immagini.<\/p>\n<h3>Uno sguardo al DOM<\/h3>\n<p>Ci\u00f2 significa che il DOM sarebbe simile a questo:<\/p>\n<p>Nota nell&#8217;immagine sopra l&#8217; <strong>ancora<\/strong> attiva l&#8217; <strong>immagine<\/strong> e l&#8217; <strong>elemento dinamico<\/strong> attiva la <strong>sovrapposizione dinamica<\/strong>.<\/p>\n<p>Quindi, come possiamo visualizzare il secondo elemento dinamico quando il primo ha fatto clic senza uscire dalla pagina? Puoi farlo esaminando la destinazione dell&#8217;evento che \u00e8 stato attivato.<\/p>\n<h3>Il Codice per la Gestione degli Eventi<\/h3>\n<p>User\u00f2 jQuery di seguito poich\u00e9 la maggior parte dei miei lettori lavora con WordPress e WordPress viene fornito con jQuery, ma questo pu\u00f2 anche essere gestito con JavaScript vanilla (ma provare a percorrere quella strada \u00e8 pi\u00f9 di quanto io sia disposto a spiegare in questo particolare inviare).<\/p>\n<p>Detto questo, ecco il succo di cui spiegher\u00f2 cosa sta succedendo <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/c2d33cce48603de444d2a620927f32da#file-00-example-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">con il codice:<\/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>Innanzitutto, presumo che ci siano pi\u00f9 elementi dinamici, quindi il motivo di <a href=\"https:\/\/api.jquery.com\/jquery.each\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ciascun<\/a> iteratore.<\/p>\n<p>Successivamente, crea un riferimento all&#8217;elemento <strong>anchor<\/strong> che \u00e8 un genitore dell&#8217;istanza corrente dell&#8217;elemento dinamico (l&#8217;uso di <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> qui \u00e8 importante in modo che faccia sempre riferimento all&#8217;elemento che \u00e8 il genitore dell&#8217;istanza corrente dell&#8217;iterazione rispetto alla sovrascrittura di un&#8217;istanza precedente ).<\/p>\n<p>Quando si fa clic sull&#8217;elemento, impostiamo un gestore di <strong>clic<\/strong> in modo da poter dare un&#8217;occhiata alla destinazione dell&#8217;evento dell&#8217;evento clic. Qui \u00e8 dove diventa un po&#8217; confuso.<\/p>\n<p>Abbiamo variabili <strong>e<\/strong> ed <strong>evt<\/strong> ciascuna delle quali si riferisce al gestore di eventi per un elemento specifico. Nel codice sopra:<\/p>\n<ul>\n<li><strong>e<\/strong> si riferisce all&#8217;evento legato al nostro elemento dinamico,<\/li>\n<li><strong>evt<\/strong> si riferisce all&#8217;elemento ma influenzer\u00e0 anche il processo di bubbling degli eventi, il che significa che attiver\u00e0 eventi nel resto del DOM.<\/li>\n<\/ul>\n<p>E quindi, nel nostro condizionale, valutiamo la destinazione del primo gestore di eventi per assicurarci che non corrisponda all&#8217;elemento specifico. Da l\u00ec, come puoi vedere nel commento al codice, puoi determinare come vuoi procedere (come magari andare avanti e lasciarlo navigare altrove o fare qualcos&#8217;altro).<\/p>\n<p>Alla fine \u00e8 la tua chiamata. Ma quando entri in un legame di elementi dinamici, elementi statici e gestori di eventi, pu\u00f2 complicarsi rapidamente.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Quando si entra in un&#8217;associazione di elementi dinamici, elementi statici e gestori di eventi, pu\u00f2 complicarsi rapidamente.<\/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":[896,731,720],"tags":[1168],"class_list":["post-230527","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codice","category-javascript-6","category-sviluppatore","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/230527","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=230527"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/230527\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/224006"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=230527"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=230527"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=230527"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}