为了账号安全,请及时绑定邮箱和手机立即绑定

老师我在 item.addEventListener中的 li.children[1].classList.remove("active");一直报错说 Cannot read property 'classList' of undefined

class Menu {

  constructor(id) {

    this.box = document.querySelector(id)


    this.ul = this.box.querySelector("ul");

    this.lis = this.box.querySelectorAll("li");//因为有多个li结点,所以加All

    this.subMenu = this.box.querySelectorAll(".sub-menu");

    this.time1 = null;

    this.time2 = null;


    this.init();//调用init

  }

  init() {

    console.log("menu");

   

    this.lis.forEach((item) => {

      

      item.addEventListener("mouse", (e) => {

        let li = e.target;

        console.log("mouse");


          this.time1=setTimeout(()=>

          {

            this.subMenu.forEach((item)=>

            {

              item.classList.remove("active");

            })//在这里用循环


             if(this.time1 !=null)

             {

               clearInterval(this.time1);

             }


            li.children[1].classList.add("active");//children[1]就是li下的第二个子类

          },200)

      })

    });

    //item.addEventListenneer代表鼠标触发事件,e有点像函数一样包含其中的事件


    this.lis.forEach((item) => {

      item.addEventListener("mouseleave", (e) => {

        let li = e.target;

        console.log("mouseleave");


        this.time2=setTimeout(() => {

          this.subMenu.forEach((item)=>

            {

              item.classList.remove("active");

            })//在这里用循环

          li.children[1].classList.remove("active");

        },200)

      })

    });

  }



}



正在回答

1 回答

你发的代码错误百出,核对一下代码吧。

报错是发生在倒数第二个remove那里的,第一个循环的事件是mouseenter不是mouse,而且你第二个循环那里怎么有两个循环?而且怎么是item.classList?

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

老师我在 item.addEventListener中的 li.children[1].classList.remove("active");一直报错说 Cannot read property 'classList' of undefined

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信