简体   繁体   English

使用JavaScript切换CSS类-错误

[英]Toggle CSS Classes using JavaScript - Error

I'm trying to make a Script that when a user clicks in an image with the class "burger-nav-img" it toggles the class "open" in another elements. 我正在尝试制作一个脚本,当用户单击带有“ burger-nav-img”类的图像时,它将在另一个元素中切换“打开”类。 My code is: 我的代码是:

HTML 的HTML

<nav class="main-nav">
    <ul class="flex-container">
        <li class="flex-content"><a href="#">Home</a></li>
        <li class="flex-content"><a href="#">Articles</a></li>
        <div class="logo_container flex-container">
            <img src="img\logo_background.png" class="logo flex-content">
        </div>
        <li class="flex-content"><a href="#">Support</a></li>
        <li class="flex-content"><a href="#">Login</a></li>
    </ul>
<a class="burger-nav">
    <img src="img/menu.png" id="burger" class="burger-nav-img">
</a>

JavaScript 的JavaScript

document.body.addEventListener("load", clas);
function clas() {
    document.getElementsByClassName("burger-nav-img").addEventListener("load", toggl);
}
function toggl() {
    const burger = document.getElementsByClassName("burger-nav");
    burger.classList.toggle("open");
    const main = document.getElementsByClassName("main-nav");
    main.classList.toggle("open");
}

The problem is that when I run this code an error appears and I can't figure out what to do: 问题是,当我运行此代码时,出现错误并且我不知道该怎么办:

Console 安慰

menu.js:7 Uncaught TypeError: Cannot read property 'toggle' of undefined
    at toggl (menu.js:7)
    at clas (menu.js:3)
    at menu.js:1
toggl @ menu.js:7
clas @ menu.js:3
(anonymous) @ menu.js:1

Note: menu.js is the file containing the JavaScript Code; 注意:menu.js是包含JavaScript代码的文件;

What should I do? 我该怎么办? Thank You For Your Attention! 感谢您的关注!

getElementsByClassName returns an array of elements, and an array doesn't have classList property, and therefore you get undefined. getElementsByClassName返回一个元素数组,并且该数组没有classList属性,因此您未定义。

Use burger[0].classList or use an Id and getElementById that returns a single element. 使用burger[0].classList或使用返回单个元素的Id和getElementById

burger返回一个集合,所以你应该做类似的事情

for (let i = 0; i < burger.length; i++) { burger[i].classList.toggle("open"); }

Ok after some research and a lot of attempts to solve the problem I finally got it. 经过一些研究和尝试解决问题的确定,我终于明白了。 This is my final JavaScript Code: 这是我最后的JavaScript代码:

document.getElementById("burger").onclick = toggl;

function toggl() {
    console.log("OK");
    var burger = document.getElementById("burger-nav");
    var main = document.getElementById("main-nav");
    if (burger.classList.contains("open")) {
        console.log("OKEY-DOKEY");
        burger.classList.remove("open");
        main.classList.remove("open");
    } else {
        console.log("OK-OK");
        burger.classList.add("open");
        main.classList.add("open");
    }

}

Thanks to Everyone who helped me! 感谢所有帮助我的人! I appreciated It a lot! 我非常感激!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM