[wp-trac] [WordPress Trac] #57915: Navigation links starting with /# don't close hamburger navigation menu on mobile

WordPress Trac noreply at wordpress.org
Mon Mar 13 18:53:45 UTC 2023


#57915: Navigation links starting with /# don't close hamburger navigation menu on
mobile
--------------------------+-----------------------------
 Reporter:  asafm7        |      Owner:  (none)
     Type:  defect (bug)  |     Status:  new
 Priority:  normal        |  Milestone:  Awaiting Review
Component:  Menus         |    Version:
 Severity:  normal        |   Keywords:
  Focuses:                |
--------------------------+-----------------------------
 This code in /wp-includes/blocks/navigation/view-modal.min.js closes the
 hamburger navigation menu when a regular bookmark link (starting with #)
 is clicked:


 {{{
 document.querySelectorAll(".wp-block-navigation-
 item__content").forEach((function(e) {
             var t, o;
             if (null === (t = e.getAttribute("href")) || void 0 === t ||
 !t.startsWith("#") || "_blank" === (null === (o = e.attributes) || void 0
 === o ? void 0 : o.target))
                 return;
             const n = e.closest(".wp-block-navigation__responsive-
 container")
               , i = null == n ? void 0 : n.getAttribute("id");
             e.addEventListener("click", (()=>{
                 i && n.classList.contains("has-modal-open") && c.close(i)
             }
             ))
         }
         ))
 }}}


 This is great, but bookmark links starting with # will only work if the
 bookmark is on the current page a simple # link won't work. A /# link
 (with a slash) will work on the other hand - it will navigate to the
 homepage, and then scroll to the section. For example: /#some-section
 (instead of #some-section)

 If the visitor is on the homepage, such a link with a / will work the same
 as a link without a / - scrolling to the section, without reloading the
 page. This makes it a perfect catch-all solution.

 But, clicking such a link (/#) won't close the hamburger navigation menu
 on mobile, as the JavaScript code above only catches links starting with #
 (and not /#). This can be easily fixed by adding another OR condition:
 ||!t.startsWith("/#") or maybe even replacing the current condition with a
 "includes" condition, to catch both cases with one condition:
 ||!t.includes("#")

 Thanks,
 Asaf

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/57915>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list