![](/img/trans.png)
[英]Uncaught TypeError: Cannot read property 'addEventListener' of null when i run got this error
[英]Uncaught TypeError: Cannot read property 'addEventListener' of null when i try to run my code in chrome
因此,當我嘗試在瀏覽器 chrome 中運行我的 html 文件時會記錄該錯誤,但在 Visual Studio 代碼中它不會記錄任何問題。 我該如何解決這個問題並確保它不會在未來發生? 我的js代碼:
const navbarBtn = document.querySelector("navbar__btn"); const navbarLinks = document.querySelector("navbar__links"); navbarBtn.addEventListener("click", function () { let value = navbarLinks.classList.contains("navbar__collapse"); if (value) { navbarLinks.classList.remove("navbar__collapse"); } else { navbarLinks.classList.add("navbar__collapse"); } });
您的代碼有兩件事可能有問題。
您需要確保在加載所需的 html 之后加載您的 JS。 沒有詳細說明,兩種好方法是:
加載 html 文件底部的腳本
<script src="main.js"></script>
</body>
在你的腳本上使用defer
<script defer src="./main.js"></script>
</head>
在您的示例中,您嘗試像這樣訪問您的 DOM 元素:
const navbarBtn = document.querySelector("navbar__btn");
但是,這是在尋找自定義標簽<navbar__btn>
。 我相信您更有可能正在尋找帶有“navbar__btn”的 class 的標簽,因此您必須添加一個點來引用 class。
const navbarBtn = document.querySelector(".navbar__btn");
要運行 jquery 代碼,它必須始終包含在 $() 中,您在 navbarBtn.addEventListener("click", function () {
嘗試這個:
const navbarBtn = document.querySelector("navbar__btn");
const navbarLinks = document.querySelector("navbar__links");
$(navbarBtn).addEventListener("click", function () {
let value = navbarLinks.classList.contains("navbar__collapse");
if (value) {
navbarLinks.classList.remove("navbar__collapse");
} else {
navbarLinks.classList.add("navbar__collapse");
}
});
此外,您真的不需要 addEventListener function,因為 Jquery 會自動檢測您是否單擊按鈕。
此代碼也應該有效:
$(navbarBtn).on('click,function(){
// your logic here
});
問題是,它沒有找到您嘗試將事件附加到的節點。 所以它必須與document.querySelector()
方法的工作相關聯。
您可能想要發送節點的id
或class
,但這不是傳遞id
和class
值的正確方法。
您應該將代碼重寫為
// If you are passing id
const navbarBtn = document.querySelector("#navbar__btn");
const navbarLinks = document.querySelector("#navbar__links");
// If you are passing class
const navbarBtn = document.querySelector(".navbar__btn");
const navbarLinks = document.querySelector(".navbar__links");
請記住,如果您將class
作為參數傳遞,您將獲得第一個元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.