鼠标进入一级菜单,为二级菜单添加的className报错,
登陆购买课程后可参与讨论,去登陆吧
同学你好,报错提示:不能给undefined设置className属性,在截图中没有看到定义i,建议:同学可以打印menus和i,有可能menus中有4个值,而i的值是8,menus[i]会是undefined,就会出现同学提供的报错。
祝学习愉快~
const twoMenu=document.getElementById('menus')// 引入二级模板import renders from './two.art'import {getData} from 'api/getData'var menu_fn=function(){ //得到所有一级菜单Li标签 var menu_lis=document.querySelectorAll('#v-menu li[data-n]'); //得到vmenubox盒子 var vmenubox=document.getElementById('v-menu-box') //批量添加事件监听 for(var i=0;i<menu_lis.length;i++){ //鼠标触碰某个菜单项 menu_lis[i].onmouseenter=function(){ //所有菜单项去掉active类 for(var j=0;j<menu_lis.length;j++){ menu_lis[j].className=''; } //触碰的菜单项添加active this.className='active' //获取移入那个一级菜单 var type=this.getAttribute('data-n') //根据参数请求对应的二级菜单 getData(`https://www.imooc.com/api/mall-PC/index/menu/${type}`) .then(data=>{ //渲染二级菜单数据 twoMenu.innerHTML=renders({ type:type, data:data }) //每次重新渲染二级菜单,二级菜单的dom结构都是新生成,需要重新获取 var menus=document.querySelectorAll('#menus .menu'); console.log(i); //让所有菜单隐藏,去掉active类 for(var j=0;j<menus.length;j++){ menus[j].className='menu'; } menus[i].className='menu active' }) } } //鼠标离开vmenubox盒子 vmenubox.onmouseleave=function(){ //每次重新渲染二级菜单,二级菜单的dom结构都是新生成,需要重新获取 var menus=document.querySelectorAll('#menus .menu'); //让所有菜单隐藏 for(var j=0;j<menus.length;j++){ menus[j].className='menu'; } //所有菜单项去掉active类 for(var j=0;j<menus.length;j++){ menu_lis[j].className=''; } }}export default menu_fn;
老师给检查一下,menus和i长度都为6
已经找到问题了,将for循环变量用let定义就可以了,谢谢老师指点!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
登录后可查看更多问答,登录/注册
前端技术快速更迭,人才紧缺。带你从0基础开始,成为Web全栈工程师,转行就业更顺畅。
93 2
44 2
74 4
30 1
32 1
在线咨询
领取优惠
免费试听
领取大纲
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星