2010-08-19 133 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事件來隱藏彈出窗口。