以下這段 JS 程式碼實現經典的單一展開導航選單:點擊某項展開內容,同時關閉其他已展開項目。適合側邊欄選單、常見問答(FAQ)摺疊面板等場景。
function leo(n) {
var navUi = document.getElementById("m" + n);
if (navUi.style.display != "block") {
for (var i = 0; i <= 5; i++) {
document.getElementById("m" + i).style.display = "none";
}
navUi.style.display = "block";
} else {
navUi.style.display = "none";
}
}
| 程式碼 | 說明 |
|---|---|
var navUi = document.getElementById("m" + n) | 取得 ID 為 m{參數n} 的 DOM 元素,對應點選的選單面板 |
if (navUi.style.display != "block") | 判斷該面板目前是否為隱藏狀態(非 block 顯示) |
for (var i = 0; i <= 5; i++) | 迴圈處理 ID 為 m0~m5 的所有面板 |
document.getElementById("m" + i).style.display = "none" | 全部隱藏,確保同時間只有一個面板展開 |
navUi.style.display = "block" | 將當前點選的面板設為顯示 |
else { navUi.style.display = "none" } | 若面板原本已展開,再次點擊則摺疊隱藏 |
n 為呼叫時傳入的索引值(0~5),對應 HTML 中各面板的 ID 尾碼。例如:onclick="leo(2)" 會控制 id="m2" 的元素。
5 改為動態取得面板總數:document.querySelectorAll('[id^=m]').length - 1。classList.toggle('active')),分離樣式與行為。aria-expanded 無障礙屬性,提升可及性。