Javascript body OnClick

前端之家收集整理的这篇文章主要介绍了Javascript body OnClick前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在学习 Javascript,我正在尝试创建一个简单的下拉菜单.您可以在顶部菜单的Google主页上看到我所需功能的示例,其中包含“更多”和“设置”下拉菜单.具体来说,当您点击菜单时,菜单消失.

在Javascript中的hideMenus函数中需要什么代码,以便在屏幕上的任何位置点击时隐藏可见的uls?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml">  

<head>  
<Meta content="text/html; charset=utf-8" http-equiv="Content-Type" />  
<title>Untitled 1</title>  

<style type="text/css">  
a  
{  
    color:blue;  
}  

.info ul.submenu  
{  
    border: solid 1px #e0e0e0;  
    background-color: #fff;  
    position: absolute;  
    padding: 0;  
    z-index: 2;  
    display: none;  
}  

.info ul.submenu li  
{  
    display: block;  
    border-top: solid 1px #e0e0e0;  
    margin: 0px 10px 0 10px;  
}  

.info ul.submenu li a  
{  
    display: block;  
    padding: 7px 0px 6px 0;  
    color: #1177ee;  
    cursor:pointer;  
}  

</style>  

<script type="text/javascript">  

function hideMenus()
{
//TODO
}

function menu(id) {     
    var myLayer = document.getElementById(id);     

    myLayer.onblur = function() {       
        myLayer.style.display = 'none';   
    };   

    if (myLayer.style.display == "none" || myLayer.style.display == "") {     
        myLayer.style.display = "block";     
    } else {     
        myLayer.style.display = "none";     
    }     
}  

</script>  
</head>  

<body onclick="hideMenus();">  
<div class="info">     
     Some Text Boom A <a  onclick="menu('id1');">Link</a> | More text    
     <a onclick="menu('id2');">Another Link</a> | more text    
     <ul id="id1" class="submenu">     
       <li><a href="dfhdfh">A1</a></li>     
       <li><a href="aetjetjsd">A2 This is Long</a></li>     
       <li><a href="etetueb">A3</a></li>     
     </ul>     
    <ul id="id2" class="submenu">     
       <li><a href="dfhdfh">B1</a></li>     
       <li><a href="aetjetjsd">B2</a></li>     
       <li><a href="etetueb">B3</a></li>     
     </ul>     
  </div>    
</body>  
</html>

我不想使用jQuery.

解决方法

看起来你有一个相当体面的设置.你可能遇到一些事件冒泡的问题(更多信息,请查看 PPK’s Event Order Article).这似乎超出了你当前问题的范围,所以我只是给你你所要求的:
hideMenus()
{
    var uls = document.getElementsByTagName('ul'),i;
    for (i = 0; i < uls.length; i++)
    {
        if (uls[i].className === 'submenu' && uls[i].style.display !== 'none')
        {
            uls[i].style.display = 'none';
        }
    }
}

首先,我们获取页面上的所有< ul>.然后,我们循环遍历所有这些,检查它是否是一个子菜单,如果它当前显示.如果两者皆为真,则隐藏它.

这段代码有几个故障:

>如果uls有多个类(class =“动物子菜单”),那么它不会隐藏菜单
>它将查看页面上的所有< ul>.这不是完全有效的,但它是唯一的方式来做,而不需要跨浏览器支持getElementsByClass.

这些并不是巨大的错误,特别是如果你只是使用它来了解javascript,并且如果你密切地控制你的代码(即没有其他的开发人员正在使用它).总而言之,这是一个很好的垫脚石.

将来,我建议使用addEvent – 一个相当常见的函数,它允许您在不使用onclick =“…”的情况下向元素添加事件处理程序.有几种不同的实现方式,但它们(几乎)从你的角度来看都是一样的.以下是Dean Edwards’s VersionJohn Resig’s Version链接

祝你好运!

猜你在找的JavaScript相关文章