关于js:Uncaught TypeError Cannot read properties of undefined (reading ‘style‘) 全局与局部变量 for循环

在尝试点击li元素显示对应div时遇到JavaScript错误:Cannot read properties of undefined (reading 'style')。问题源于for循环内的局部变量作用域限制。解决方案包括使用全局变量或为div添加自定义属性来保存索引,以便在函数体内正确引用。

问题:
想实现点击一个li,就会展示对应的div:
代码为:

var tab_list = document.querySelector('.tab_list');
    var lis = tab_list.querySelectorAll('li');
    var items = document.querySelectorAll('.item');
    for(var i = 0; i < lis.length; i++){
        // 设置每个li的index值
        // lis[i].setAttribute('index',i)
        lis[i].onclick = function (){
            // console.log(this.getAttribute('index'))
            for(var j = 0; j < lis.length; j++){
                lis[j].className = ''
                items[j].style.display = 'none'
            }
            this.className = 'current'
            // var index = this.getAttribute('index')
            items[i].style.display = 'block'
        }
    }

在这里插入图片描述
点击后报错,提示找不到style属性,因此判定为**items[i]**错误。

原因:
在for循环中定义的循环变量,属于局部变量,只在for循环的外层有效,无法在函数体内使用。

解决办

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值