{"id":229788,"date":"2022-11-24T19:13:00","date_gmt":"2022-11-24T16:13:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229788"},"modified":"2022-11-09T16:23:13","modified_gmt":"2022-11-09T13:23:13","slug":"duenaamilised-elemendid-staatilised-elemendid-suendmuste-kaeitlejad-ja-nende-keerukus","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/duenaamilised-elemendid-staatilised-elemendid-suendmuste-kaeitlejad-ja-nende-keerukus\/","title":{"rendered":"D\u00fcnaamilised elemendid, staatilised elemendid, s\u00fcndmuste k\u00e4itlejad ja nende keerukus"},"content":{"rendered":"\n<p>Lehe virnastatud elementidega t\u00f6\u00f6tamine, millest m\u00f5ned on ankrud ja teised, mis on s\u00fcndmuste k\u00e4itlejatega, v\u00f5ivad m\u00f5nikord p\u00f5hjustada veidrat k\u00e4itumist.<\/p>\n<p>L\u00f5ppkokkuv\u00f5ttes on see k\u00f5ik seotud s\u00fcndmuste levitamisega, kuid kui te pole sellega (v\u00f5i s\u00fcndmuste mullitamise v\u00f5i muu sellisega) tegelema pidanud, v\u00f5ib see olla v\u00e4ike v\u00e4ljakutse.<\/p>\n<p>Ja siin on n\u00e4ide: mis siis, kui teil on ankrusse m\u00e4hitud pilt. Mis juhtub, kui sisestate p\u00e4rast lehe laadimist JavaScripti kaudu d\u00fcnaamilise elemendi, mis laadib teise d\u00fcnaamilise elemendi? Peale selle, kas soovite peatada lehe \u00fcmbersuunamise, kui d\u00fcnaamilisel elemendil kl\u00f5psatakse, kuid siiski suunamise, kui pildil kl\u00f5psate?<\/p>\n<p>See v\u00f5ib tunduda lihtne \u2013 ja m\u00f5nel juhul on see nii \u2013, kuid kui teil on l\u00e4bipaistev element, mis katab kogu algse pildi, v\u00f5ib see muutuda hoopis teiseks v\u00e4ljakutseks.<\/p>\n<p>Siin tuleb m\u00e4ngu s\u00fcndmuste sihtm\u00e4rkide m\u00f5istmine. Kuid enne, kui hakkan seda lahendama, proovin k\u00f5ik lihtsamaks selgituseks destilleerida ja joonistada diagrammi, kuidas see DOM-is renderdatakse.<\/p>\n<h2>D\u00fcnaamilised elemendid, staatilised elemendid ja s\u00fcndmuste k\u00e4itlejad<\/h2>\n<p>Nii et proovige seda ette kujutada: teil on\u2026<\/p>\n<ul>\n<li>Leht, millel on pilt ja pilt on m\u00e4hitud ankrusse, mis viib teid n\u00e4iteks teisele lehele.<\/li>\n<li>Lehe laadimisel luuakse kaks d\u00fcnaamilist elementi. Kui kl\u00f5psate esimesel, peaks see kuvama teise d\u00fcnaamilise elemendi.<\/li>\n<li>Esimesel d\u00fcnaamikal kl\u00f5psamisel ei tohiks see lehte \u00fcmber suunata.<\/li>\n<li>Kui algsel pildil kl\u00f5psate, peaks see k\u00e4ituma ootusp\u00e4raselt.<\/li>\n<\/ul>\n<p>Selle raske osa on see, et d\u00fcnaamilised elemendid asetatakse olemasoleva ankru ja pildi kombinatsiooni peale.<\/p>\n<h3>Pilk DOM-ile<\/h3>\n<p>See t\u00e4hendab, et DOM n\u00e4eks v\u00e4lja umbes selline:<\/p>\n<p>M\u00e4rkus \u00fclaloleval pildil k\u00e4ivitab <strong>ankur<\/strong> <strong>pildi<\/strong> ja <strong>d\u00fcnaamiline element<\/strong> k\u00e4ivitab <strong>d\u00fcnaamilise \u00fclekatte<\/strong>.<\/p>\n<p>Kuidas siis kuvada teist d\u00fcnaamilist elementi, kui esimene kl\u00f5psas, ilma lehelt lahkumata? Seda saate teha k\u00e4ivitatud s\u00fcndmuse sihtm\u00e4rki uurides.<\/p>\n<h3>S\u00fcndmuste k\u00e4sitlemise kood<\/h3>\n<p>Kasutan allpool jQueryt, kuna enamik minu lugejaid t\u00f6\u00f6tab WordPressiga ja WordPress tarnib jQueryga, kuid seda saab k\u00e4sitleda ka vanilje JavaScriptiga (kuid sellel teel on rohkem kui ma olen n\u00f5us selles konkreetses selgitama postitus).<\/p>\n<p>Seda \u00f6eldes selgitan siin <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/c2d33cce48603de444d2a620927f32da#file-00-example-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">koodiga toimuvat sisu:<\/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>Esiteks, ma eeldan, et d\u00fcnaamilisi elemente on mitu, seega <a href=\"https:\/\/api.jquery.com\/jquery.each\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">iga<\/a> iteraatori p\u00f5hjus.<\/p>\n<p>J\u00e4rgmisena loob see viite <strong>ankurelemendile<\/strong>, mis on d\u00fcnaamilise elemendi praeguse eksemplari vanem (<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> -i kasutamine siin on oluline, et see viitaks alati elemendile, mis on iteratsiooni praeguse eksemplari vanem v\u00f5rreldes eelmise eksemplari \u00fclekirjutamisega ).<\/p>\n<p>Kui elemendil kl\u00f5psatakse, seadistame <strong>klikit\u00f6\u00f6tleja<\/strong>, et saaksime vaadata kl\u00f5psus\u00fcndmuse sihtm\u00e4rki. Siin l\u00e4heb see natuke segaseks.<\/p>\n<p>Meil on muutujad <strong>e<\/strong> ja <strong>evt<\/strong>, millest iga\u00fcks viitab konkreetse elemendi s\u00fcndmuste k\u00e4itlejale. \u00dclaltoodud koodis:<\/p>\n<ul>\n<li><strong>e<\/strong> viitab s\u00fcndmusele, mis on seotud meie d\u00fcnaamilise elemendiga,<\/li>\n<li><strong>evt<\/strong> viitab elemendile, kuid m\u00f5jutab ka s\u00fcndmuste mullitamisprotsessi, mis t\u00e4hendab, et see k\u00e4ivitab s\u00fcndmusi kogu \u00fclej\u00e4\u00e4nud DOM-is.<\/li>\n<\/ul>\n<p>Seega hindame tingimuses esimese s\u00fcndmusek\u00e4sitleja sihtm\u00e4rki, et veenduda, et see ei vasta konkreetsele elemendile. Sealt saate, nagu n\u00e4ete koodi kommentaaris, m\u00e4\u00e4rata, kuidas soovite edasi minna (nt kas minna edasi ja lasta sellel mujal liikuda v\u00f5i teha midagi muud).<\/p>\n<p>L\u00f5ppkokkuv\u00f5ttes on see teie k\u00f5ne. Kui aga sattute d\u00fcnaamiliste elementide, staatiliste elementide ja s\u00fcndmuste k\u00e4itlejate hulka, v\u00f5ib see kiiresti keeruliseks minna.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kui olete sattunud d\u00fcnaamiliste elementide, staatiliste elementide ja s\u00fcndmuste k\u00e4itlejate hulka, v\u00f5ib see kiiresti keeruliseks minna.<\/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":[718,729,894],"tags":[1165],"class_list":["post-229788","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-javascript-4","category-kood","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/229788","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/comments?post=229788"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/229788\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/224006"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=229788"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=229788"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=229788"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}