JavaScript默认值会影响子对象
我正在编写一个小脚本,当单击菜单项时基本上切换子菜单 我设法使它工作,但我有一个问题,我使用preventDefault的功能,所以当父链接被单击时,子菜单显示 问题是,preventDefault也会影响子菜单,并且子菜单链接也不可单击 该网站是建立在wordpress,所以我不能修改HTML。 这是密码 HTML:JavaScript默认值会影响子对象,javascript,html,wordpress,Javascript,Html,Wordpress,我正在编写一个小脚本,当单击菜单项时基本上切换子菜单 我设法使它工作,但我有一个问题,我使用preventDefault的功能,所以当父链接被单击时,子菜单显示 问题是,preventDefault也会影响子菜单,并且子菜单链接也不可单击 该网站是建立在wordpress,所以我不能修改HTML。 这是密码 HTML: <li id="menu-item-69" class="menu-item menu-item-type-post_type menu-item-object-page
<li id="menu-item-69" class="menu-item menu-item-type-post_type menu-item-object-page current-menu-item page_item page-item-60 current_page_item menu-item-has-children menu-item-69"><a href="#" aria-current="page">UNTERNEHMEN</a>
<ul class="sub-menu">
<li id="menu-item-316" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-316"><a href="/blog">AKTUELLES</a></li>
<li id="menu-item-265" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-265"><a href="#">KARRIERE</a></li>
<li id="menu-item-293" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-293"><a href="#">KOOPERATIONEN</a>
<ul class="sub-menu">
<li id="menu-item-298" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-298"><a href="#">LINKS</a></li>
</ul>
</li>
您需要检查事件的当前目标是否是您的父菜单,并且只调用preventDefault,然后:
if (event.currentTarget == yourElement) {
event.preventDefault();
}
使用事件委派是最好的方法,而不是绑定成吨的事件处理程序 //参考菜单的外部元素 document.querySelector'.menu' //将单击事件绑定到它 .addEventListenerclick,functionevent{ //获取单击所在的li var li=event.target.closestli //查看li中是否有子菜单 var子菜单=li.queryselector 如果子菜单{ //如果有,停止活动 event.preventDefault //切换类以显示和隐藏子菜单 子菜单.classList.toggleactive } } .子菜单{ 显示:无 } .sub-menu.active{ 显示:块 }
我一开始就看到了这个问题,但我没有时间回答,我现在在做什么 const myMenu=document.getElementByIdMy-Menu myMenu.onclick=e=> { 如果e.target.tagName!=='A'返回 让following=e.target.nextElementSibling 如果following&&following.tagName===“UL” { e、 防止违约 following.style.display=following.style.display=='none'?'block':'none' } }
你应该看看我的答案
if (event.currentTarget == yourElement) {
event.preventDefault();
}