forEach
這個錯誤訊息 "Uncaught TypeError: tablinks.forEach is not a function" 表示 tablinks 這個變數,它看起來像是一個 DOM 元素的集合,但是它並沒有 forEach 這個方法。
將 HTMLCollection 轉換為 Array :你可以使用 Array.from() 或展開運算符 ... 來將 HTMLCollection 轉換為真正的陣列,然後再使用 forEach。 window.addEventListener('load', () => { const tablinks = document.getElementsByClassName('tablinks'); // 轉換為陣列 Array.from(tablinks).forEach(tablink => { tablink.addEventListener('click', () => { openPage(tablink, tablink.dataset.pagename); }); }); createDailyPage(); document.getElementById("DefaultOpen").click(); });或者使用展開運算符: window.addEventListener('load', () => { const tablinks = [...document.getElementsByClassName('tablinks')]; tablinks.forEach(tablink => { tablink.addEventListener('click', () => { openPage(tablink, tablink.dataset.pagename); }); }); createDailyPage(); document.getElementById("DefaultOpen").click(); });使用 for 迴圈 :HTMLCollection 雖然不是陣列,但你可以像陣列一樣使用傳統的 for 迴圈來迭代它。 const tablinks = document.getElementsByClassName('tablinks'); for (let i = 0; i < tablinks.length; i++) { const tablink = tablinks[i]; tablink.addEventListener('click', () => { openPage(tablink, tablink.dataset.pagename); }); } createDailyPage(); document.getElementById("DefaultOpen").click(); });使用 document.querySelectorAll (推薦):document.querySelectorAll 返回的是一個 NodeList,它在現代瀏覽器中是支援 forEach 方法的。這是處理多個元素時更現代且常見的方法。 window.addEventListener('load', () => { const tablinks = document.querySelectorAll('.tablinks'); // 注意這裡使用了 CSS 選擇器 '.' tablinks.forEach(tablink => { tablink.addEventListener('click', () => { openPage(tablink, tablink.dataset.pagename); }); }); createDailyPage(); document.getElementById("DefaultOpen").click(); });
留言
張貼留言