2010-08-19 101 views
0

我正在学习JavaScript的过程中,我试图创建一个简单的下拉菜单。我的所需功能的一个例子可以在顶部菜单中的google主页上看到“更多”和“设置”下拉菜单。特别是点击菜单并且菜单消失。可能onblur()不是正确的调用函数。我不知道。 我有这样的代码:Onblur事件绑定

<!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 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> 
<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> 

onblur事件只是根本不起作用。我不知道为什么。

(是的,我知道我不应该使用一个闭合)

回答

2

它不烧,因为UL从未获得焦点。只是显示它并没有给它关注。

两种方式来解决这个问题:

  1. 添加tabindexUL S和调用myLayer.focus();你展示它的menu(..)函数内后。这并不是很好,因为您在技术上并不想要focus下拉,并且您的UL周围会出现焦点矩形的副作用。

  2. 在文档上注册一个onclick处理程序,该处理程序将隐藏任何可见的菜单。

0

如下所述:以下要素

http://www.devguru.com/technologies/ecmascript/quickref/evhan_onblur.html

onblur事件只触发:

按钮,复选框,文件上传,层, 密码,收音机,复位,选择, 提交,文本,文本区域,窗口。

它看起来像你试图在UL元素上使用该事件。相反,我建议在document上使用onclick事件来隐藏弹出窗口。