Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript默认值会影响子对象_Javascript_Html_Wordpress - Fatal编程技术网

JavaScript默认值会影响子对象

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

我正在编写一个小脚本,当单击菜单项时基本上切换子菜单

我设法使它工作,但我有一个问题,我使用preventDefault的功能,所以当父链接被单击时,子菜单显示

问题是,preventDefault也会影响子菜单,并且子菜单链接也不可单击

该网站是建立在wordpress,所以我不能修改HTML。 这是密码

HTML:

<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();
}