简体   繁体   中英

Uncaught TypeError: Cannot read properties of null (reading 'classList') at HTMLDivElement.<anonymous>

I'm making a WordPress theme and wanted to make my header(navbar) dynamic. So while I was doing that I wanted to make my navbar mobile responsive so while I do that I was facing this error in the Javascript file given in title.

header.php

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <?php
        wp_head();
    ?>
</head>

<body>
    <!--NAVBAR Start-->
    <nav class="fullnav">
        <div class="container">
            <div class="align-item-center">
                <div class="main-nav">
                    <div class="main-nav-1">
                        <a href="index.html"></a>
                        <img src="wp-content/themes/blog/assets/img/logo.jpg" alt="">
                    </div>
                    <div class="hamburger">
                            <span class="bar"></span>
                            <span class="bar"></span>
                            <span class="bar"></span>
                        </div>
                    <div class="main-nav-2">
                            <?php
                                wp_nav_menu(
                                        array(
                                            'manu' => 'primary-menu',
                                            'container' => '',
                                            'item_wrap' => '<ul class="nav-menu">%3$s</ul>'
                                        )
                                );
                            ?>
                        <!-- <ul class="nav-menu ">
                            <li class="nav-item"><a href='#' class="nav-link">Explore</a></li>
                            <li class="nav-item"><a href='#' class="nav-link">How it works</a></li>
                            <li class="nav-item"><a href='#' class="nav-link">Our Blog</a></li>
                            <li class="nav-item"><a href='#' class="nav-link"> FAQ & Support</a></li>
                            <li class="nav-item"><a href="#" class="nav-btn">Business <i class="fas fa-arrow-right"></i></a></li>
                        </ul> -->
                        
                    </div>
                </div>
            </div>
        </div>
    </nav>
    <!-- NAVBAR End -->

Footer.php

    <!-- JavaScript Starts -->
    <?php
        wp_footer();
    ?>
    <!-- JavaScript Ends -->
</body>

</html>

functions.php

// For JavaScript
function qclub_register_scripts(){
    wp_enqueue_script('register-script', get_template_directory_uri() . "/assets/js/main.js", array(), '0.0.1', true);
}

add_action('wp_enqueue_scripts', 'qclub_register_scripts');

//For Menu
function register_menu(){

    register_nav_menus(
        array('primary-menu' => 'Header Menu')
    );
}
add_action("init", "register_menu");

//For menu --style
function selected_class($classes, $item){
    if(in_array('menu-item-25', $classes)){
        $classes[] = 'fas fa-arrow-right';
        $classes[] = 'nav-btn';

    }
    return $classes;
}
add_filter('nav_menu_css_class', 'selected_class', 10,2)
?>

Here is the Javascript file main.js

const hamburger = document.querySelector(".hamburger")
const navmenu = document.querySelector(".nav-menu");
hamburger.addEventListener("click", () => {
    hamburger.classList.toggle("active");
    navmenu.classList.toggle("active");
})

document.querySelectorAll(".nav-link").forEach(n => n.addEventListener("click", () => {
    hamburger.classList.remove("active");
    navmenu.classList.remove("active");
}))

WordPress generated Code

<!--NAVBAR Start-->
    <nav class="fullnav">
        <div class="container">
            <div class="align-item-center">
                <div class="main-nav">
                    <div class="main-nav-1">
                        <a href="index.html"></a>
                        <img src="wp-content/themes/blog/assets/img/logo.jpg" alt="">
                    </div>
                    <div class="hamburger">
                            <span class="bar"></span>
                            <span class="bar"></span>
                            <span class="bar"></span>
                        </div>
                    <div class="main-nav-2">
                            <ul id="menu-header-menu" class="menu"><li id="menu-item-19" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-19"><a href="http://localhost/wordpress/index.php/explore/">Explore</a></li>
<li id="menu-item-21" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-21"><a href="http://localhost/wordpress/index.php/how-it-works/">How it works</a></li>
<li id="menu-item-22" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-22"><a href="http://localhost/wordpress/index.php/our-blog/">Our Blog</a></li>
<li id="menu-item-20" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-20"><a href="http://localhost/wordpress/index.php/faq-support/">FAQ &#038; Support</a></li>
<li id="menu-item-25" class="nav-item menu-item menu-item-type-post_type menu-item-object-page menu-item-25 fas fa-arrow-right nav-btn"><a href="http://localhost/wordpress/index.php/qclub-for-business/">Business</a></li>
</ul>                        <!-- <ul class="nav-menu ">
                            <li class="nav-item"><a href='#' class="nav-link">Explore</a></li>
                            <li class="nav-item"><a href='#' class="nav-link">How it works</a></li>
                            <li class="nav-item"><a href='#' class="nav-link">Our Blog</a></li>
                            <li class="nav-item"><a href='#' class="nav-link"> FAQ & Support</a></li>
                            <li class="nav-item"><a href="#" class="nav-btn">QClub for Business <i class="fas fa-arrow-right"></i></a></li>
                        </ul> -->
                        
                    </div>
                </div>
            </div>
        </div>
    </nav>
    <!-- NAVBAR End -->

I have given all the detail here thank you for helping.

I have solved this question Answers is below: if you wanted to get a user-defined menu-list in hamburger(navbar) you have to make a class for ul like

header.php

<?PHP
     wp_nav_menu(
         array(
           manu' => 'primary-menu',
           menu_class' => 'nav-menu', // class to call in js
           container' => '',
           item_wrap' => '<ul class="nav-menu">%3$s</ul>
         )
      );
?>

main.js

const hamburger = document.querySelector(".hamburger")
const navmenu = document.querySelector(".nav-menu"); // use that class here.
hamburger.addEventListener("click", () => {
    hamburger.classList.toggle("active");
    navmenu.classList.toggle("active");
})

document.querySelectorAll(".nav-link").forEach(n => n.addEventListener("click", () => {
    hamburger.classList.remove("active");
    navmenu.classList.remove("active");
}))

I will keep this question and answer here so that others can take help from it Thank you:)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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