2013-03-08 113 views
7

我有一個用於菜單的顯示/隱藏腳本。當我點擊一個主鏈接時,它會在其下面列出一個列表。我想知道是否有辦法改變它,所以當我點擊它打開的鏈接時,但是當我點擊下一個時,它將關閉另一個,而不是將它們全部打開,除非再次單擊它以關閉。使用javascript顯示/隱藏腳本

這裏是我的腳本:

<script type="text/javascript"> 
    function toggle_visibility(id) { 
     var e = document.getElementById(id); 
     if(e.style.display == 'block') 
      e.style.display = 'none'; 
     else 
      e.style.display = 'block'; 
    } 
</script> 


<a href="#" onclick="toggle_visibility('list1');"> 
     <p>List One</p> 
     </a> 
     <div id="list1" style="display:none;"> 
     <ul> 
      <li>Item One</li> 
      <li>Item Two</li> 
      <li>Item Three</li> 
     </ul> 
     </div> 
+0

你能描述多一點你試圖達到什麼?你的問題並不是很清楚。 – benzonico 2013-03-08 07:29:50

+0

[JS顯示/隱藏div]的可能重複(http://stackoverflow.com/questions/13836848/js-show-hide-div) – 2013-08-29 18:45:59

回答

17

假設這是你的代碼:

<a href="#" onclick="toggle_visibility('list1');"> 
    <p>List One</p> 
</a> 
<div id="list1" style="display:none;"> 
    <ul> 
    <li>Item One</li> 
    <li>Item Two</li> 
    <li>Item Three</li> 
    </ul> 
</div> 
<a href="#" onclick="toggle_visibility('list2');"> 
    <p>List Two</p> 
</a> 
<div id="list2" style="display:none;"> 
    <ul> 
    <li>Item One</li> 
    <li>Item Two</li> 
    <li>Item Three</li> 
    </ul> 
</div> 

它改成這樣:

<a href="#" onclick="toggle_visibility('list1');"> 
    <p>List One</p> 
</a> 
<div id="list1" class="alist" style="display:none;"> 
    <ul> 
    <li>Item One</li> 
    <li>Item Two</li> 
    <li>Item Three</li> 
    </ul> 
</div> 
<a href="#" onclick="toggle_visibility('list2');"> 
    <p>List Two</p> 
</a> 
<div id="list2" class="alist" style="display:none;"> 
    <ul> 
    <li>Item One</li> 
    <li>Item Two</li> 
    <li>Item Three</li> 
    </ul> 
</div> 

,使您的JavaScript這樣的:

function toggle_visibility(id) { 
    var list = document.getElementsByClassName("alist"); 
    for (var i = 0; i < list.length; i++) { 
     list[i].style.display = 'none'; 
    } 
    var e = document.getElementById(id); 
    if(e.style.display == 'block') { 
     e.style.display = 'none'; 
    } else { 
     e.style.display = 'block'; 
    } 
} 

這裏是JSFiddle

而不是使用普通的JavaScript爲此,我建議你使用jQuery。

這是我會怎麼做jQuery中:

function toggle_visibility(id) { 
    $(".list").hide(); 
    $("#" + id).toggle(); 
} 
+0

加上一個jquery建議 – 2013-03-08 07:54:17

+0

第一個很好。是什麼讓你提到的第二個更好? – 2013-03-08 08:46:44

+0

有沒有辦法讓鏈接在菜單旁邊同一頁的表格或div中打開一個頁面,但是重新加載頁面並關閉菜單。這有意義嗎? – 2013-03-08 08:48:29

6

我會添加一個函數來隱藏所有的名單,但一個電流:

function toggle_visibility(id) { 
    var e = document.getElementById(id); 
    if (e.style.display == 'block') e.style.display = 'none'; 
    else e.style.display = 'block'; 

    hideAllBut(id); 
} 

function hideAllBut(id) { 
    var lists = document.querySelectorAll('.list'); 
    for (var i = lists.length; i--;) { 
     if (lists[i].id != id) { 
      lists[i].style.display = 'none'; 
     } 
    } 
} 

http://jsfiddle.net/q2E5e/

+0

ooo,從來不知道珊瑚是一個有效的顏色名稱。那麼,你每天都會學到一件事,不是嗎? – think123 2013-03-08 07:41:48

+0

什麼讓這更好? – 2013-03-08 08:51:54

+0

如果您沒有看到這種方法的好處,只需忽略它並儘可能使用。 – dfsq 2013-03-08 08:56:23