老师看下,这是怎么回事

老师看下,这是怎么回事

http://img1.sycdn.imooc.com//climg/6100a8ba093e461506960440.jpg

鼠标进入一级菜单,为二级菜单添加的className报错,

http://img1.sycdn.imooc.com//climg/6100a91809fdd91310460094.jpg

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕言 2021-07-28 10:20:08

同学你好,报错提示:不能给undefined设置className属性,在截图中没有看到定义i,建议:同学可以打印menus和i,有可能menus中有4个值,而i的值是8,menus[i]会是undefined,就会出现同学提供的报错。

祝学习愉快~

  • 提问者 激情的樱木花道 #1
    ​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

    2021-07-28 11:29:27
  • 提问者 激情的樱木花道 #2

    已经找到问题了,将for循环变量用let定义就可以了,谢谢老师指点!

    2021-07-28 11:34:36
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师