javascript 使用js在单击时执行操作

n53p2ov0  于 2023-01-07  发布在  Java
关注(0)|答案(1)|浏览(129)

我目前正在做一个弹出菜单的任务,下面是我的代码:

<script type="text/javascript">
function dropMenu(){
    document.getElementById('dropdown').style.visibility = 'visible';
    document.getElementById('dropdown').style.display = 'block';
        
}
</script>

这是我使用js函数的div:

<div class="user-menu">
        <ul>
            <li><a href="#"><span>[History]</span></a></li>
            <li>
                <a href="#" id="username" onclick="dropMenu()">
                    <span>${currentUserDetails.firstName} ${currentUserDetails.lastName}</span>
</a>
        <div>
        <ul>
                    <li>
<a href="#" id="dropdown" style="display:none;"> 
    <span>Log Out</span> 
                    </a>
                    </li>
                </ul>
            </div>
          </li>
       </ul>
   </div>

正如你所看到的,我使用js函数使这个菜单在点击时可见。现在我的问题是,我需要这个菜单在点击其他任何地方后返回不可见。换句话说,在点击这个div后,我需要这个div不可见。有什么建议吗?

uyto3xhc

uyto3xhc1#

您可以将调用绑定到一个新函数,使元素不可见。
在页面末尾添加以下脚本:

<script language="javascript" type="text/javascript">
    function dropMenu() {
        document.getElementById('dropdown').style.display = 'block';
    }        

    function hideMenu() {
        document.getElementById('dropdown').style.display = 'none';
    }        

    document.attachEvent('onclick', hideMenu);
</script>

通过在文档的onclick事件上附加hideMenu函数,文档的每个子元素(即BODY标记中的每个元素,以及插入这些元素的元素,等等)在被单击时都会触发hideMenu函数,就像前面看到的那样。
它包含了用户名锚,所以奇怪的是,当你点击用户名锚点时,它会调用dropMenu函数,该函数被定义为锚点的onclick事件处理器,然后事件会“冒泡”,导致它在锚点的每个父元素上触发,最终到达文档,我们已经将hideMenu事件定义为onclick事件处理器,导致它再次隐藏下拉锚点。
事实上,这种“冒泡”机制会给人一种印象,以为文档中的每个元素都调用了hideMenu,而实际上,被单击元素的click事件只会冒泡,直到到达文档,并触发其处理程序。
因此,我们必须稍微修改dropMenu函数以避免这种冒泡效果:

function dropMenu() {
        window.event.cancelBubble = true;
        document.getElementById('dropdown').style.display = 'block';
    }

现在,当我们点击用户名锚时,下拉锚点将显示出来,并保持显示。当我们点击页面的任何地方时,它将被隐藏。
发生这种情况是因为我们将窗口事件对象的cancelBubble属性设置为true,表示此事件不会冒泡,因此文档onclick处理程序不会触发。
我希望这个解释清楚并有用。

相关问题